2014-10-03 57 views
2

我試圖執行這樣畸形字符串例外火鳥+ LINQ

var images = context.IMAGES; 
images = from img in images 
     join imt in context.IMAGE_TAG on img.ID equals imt.ID_IMAGE 
     where tags.Any(tag => imt.TAGS.NAME.Contains(tag)) 
     select img; 

簡單的LINQ查詢時,火鳥適配器轉換爲它嘗試我的西里爾文字轉換爲UTF-8這樣

CAST(_UTF8'тату' AS VARCHAR(8191)) AS "C1" 
SQL查詢

和我

「動態SQL錯誤\ r \ nSQL錯誤代碼= -104 \ r \ nMalformed字符串」

更新: 生成的查詢:標籤的

SELECT "C"."ID" AS "ID", "C"."GUID" AS "GUID", "C"."EXT" AS "EXT", "C"."ID_USER" AS "ID_USER", "C"."IS_NEW" AS "IS_NEW"FROM "IMAGES" AS "C"INNER JOIN "IMAGE_TAG" AS "D" ON "C"."ID" = "D"."ID_IMAGE"WHERE EXISTS (SELECT  1 AS "C1" FROM (SELECT  CAST(_UTF8'тату' AS VARCHAR(8191)) AS "C1"  FROM (SELECT 1 AS X FROM RDB$DATABASE) AS "G" UNION ALL  SELECT  CAST(_UTF8'tatuir' AS VARCHAR(8191)) AS "C1"  FROM (SELECT 1 AS X FROM RDB$DATABASE) AS "H") AS "I" LEFT OUTER JOIN (SELECT  "K"."ID" AS "ID",  "K"."NAME" AS "NAME"   
FROM "TAGS" AS "K"  
WHERE "D"."ID_TAG" = "K"."ID") AS "L" ON CAST(1 AS SMALLINT) = CAST(1 AS SMALLINT) WHERE (POSITION("I"."C1", "L"."NAME")) > 0) 

簡單的表:

CREATE TABLE TAGS (
    ID INTEGER NOT NULL, 
    NAME VARCHAR(50) NOT NULL 
); 

「名稱」 列有WIN1251字符集。

+0

什麼是您的Firebird(服務器)版本和連接字符集? – 2014-10-03 06:37:13

+0

我使用Firebird 2.5和WIN1251字符集 – 2014-10-03 06:38:14

+0

什麼是生成的完整查詢,表格的定義是什麼(包括** all **列的字符集)? – 2014-10-03 07:10:26

回答

1

看起來像你使用一些非UTF8字符集爲您的連接。用戶UTF8作爲連接字符集,你很好。

+0

再次感謝您 – 2014-10-03 10:11:37