2014-10-03 2 views
2

Я пытаюсь выполнить простой запрос LINQ, как этогоискаженной строка исключение Firebird + 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; 

Когда Жар адаптер переводит SQL запроса он пытается бросить мою кириллицу текста UTF-8, как это

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

и я получаю

"Dynamic SQL Error \ г \ nSQL код ошибки = -104 \ г \ 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 
); 

"NAME" имеет Win1251 кодировка.

+0

Какая у вас версия Firebird (сервер) и набор соединений? –

+0

Я использую Firebird 2.5 и WIN1251 charset –

+0

Каков полный сгенерированный запрос и каково определение ваших таблиц (включая наборы символов из ** всех столбцов **)? –

ответ

1

Похоже, вы используете для кодирования не кодировку UTF8. Пользователь UTF8 как цепочка соединений, и все в порядке.

+0

Еще раз спасибо –

Смежные вопросы