Почему некоторые символы неправильно вводятся в SQL Server из CFQUERY?

У меня есть приложение Coldfusion, работающее на Lucee, которое подключается к базе данных SQL Server.

Когда я запускаю следующий запрос непосредственно в диспетчере SQL Server:

UPDATE article
SET content='20m²'
WHERE id=3159

Колонка заселяется нормально с 20м².

ОДНАКО, при запуске со страницы cfml, которая просто запускает это:

ОБНОВЛЕНИЕ статьи SET content='20m²' WHERE id=3159

Колонка заполняется: 20 м²

Например, появляется этот дополнительный символ Â. Это также происходит с некоторыми другими специальными символами, но с большинством из них все в порядке. Это связано с некоторой конфигурацией коннектора jdbc? Я не вижу, какая разница должна быть между двумя вышеперечисленными? Помещение значения в тег cfqueryparam не имеет значения.

Спасибо


person paddyc    schedule 26.09.2016    source источник
comment
Какая версия КФ? Возможно, вы захотите взглянуть на cfprocessingdirective, если он меньше CF11.   -  person Beginner    schedule 26.09.2016
comment
Что это за колонка? Это НВарчар? Если директива обработки не работает, вы можете попробовать синтаксис Unicode content=N'20m²' ... Также убедитесь, что вы используете cfqueryparam для привязки вашей переменной.   -  person Mark A Kruger    schedule 26.09.2016
comment
Ваш файл закодирован в Windows1252 или Utf8? Ожидает ли сервер, что файл будет иметь другую кодировку?   -  person Bernhard Döbler    schedule 26.09.2016
comment
Похоже на какую-то проблему с кодировкой.   -  person Leeish    schedule 26.09.2016
comment
Все комментарии абсолютно уместны и помогли мне понять, хотя в моем приведенном выше примере тег cfprocessingdirective с кодировкой char, установленной в utf-8, работал! Спасибо   -  person paddyc    schedule 26.09.2016
comment
@paddyc - Кстати, директива cfprocessing нужна только потому, что специальные символы жестко закодированы в файле cfm. Если реальный код передает ввод как какой-то параметр формы, в этом нет необходимости.   -  person Leigh    schedule 27.09.2016
comment
@BernhardDöbler - Вы должны опубликовать это как ответ.   -  person Leigh    schedule 27.09.2016


Ответы (1)


Если это жестко закодировано, я полагаю, вы захотите сохранить этот файл в Unicode UTF-8.

введите здесь описание изображения

Также убедитесь, что ваши аргументы JVM также обработают это. Администрирование > Настройки сервера > Java и JVM. Добавьте "-Dfile.encoding=UTF-8" в аргументы.

введите здесь описание изображения

person Jules    schedule 26.09.2016
comment
Поскольку задействован запрос к БД, это немного больше, чем просто изменение кодировки страницы ;-) Скорее всего, жесткое кодирование в любом случае предназначено только для тестирования. Итак, другая сторона вопроса заключается в том, как гарантировать, что правильные значения передаются в базу данных и правильно сохраняются. Хорошо бы поподробнее про полный цикл... - person Leigh; 28.09.2016
comment
Процесс устранения — убедитесь, что файл с размером «20 м²» правильно сохраняется и считывается. Это может быть конец БД, все работает нормально. - person Jules; 28.09.2016