Назад |
Перейти на главную страницу
Кодировка символов в sql server 2005
Где я могу настроить (если это возможно), как Sql Server 2005 «интерпретирует» кодировку символов строковых данных, отправляемых через протокол TDS (в данном случае из веб-приложения)?
Возможно, будет лучше, если я опишу всю проблемную ситуацию:
- при вставке региональных символов, таких как: ą, Ą, ć, Ł, ź (и т. д. - отшлифуйте региональные символы), через протокол TDS - запрос «INSERT INTO» из веб-приложения, они отображаются в таблице mssql как: a (вместо ą), A (вместо Ą), c, L, z и т. д.
- тип целевого столбца - nvarchar (MAX)
- Я посмотрел на данные, отправленные «через провод» (с WireShark), и все данные отправляются с использованием кодировки UTF-16, которая выглядит нормально: например, Ą отправляется как U + 0104.
- при вставке той же строки в экземпляр локальной базы данных (Microsoft SQL Server Express Edition) она работает нормально, но на удаленном хосте (в местоположении клиента - это 64-разрядная версия Microsoft SQL Server Standard Edition) происходит «де-регионализация». Вот почему я полагаю, что все дело в конфигурации SQL Server, потому что единственное отличие от стороны веб-приложения - это выбор другого сервера sql (так что драйверы TDS, конфигурация, настройки конфигурации и т. Д. Одинаковы).
Я надеюсь, что кто-нибудь может мне помочь с этим.
Я нашел причину этой проблемы. Это префикс N строковых литералов Unicode:
«Когда SQL Server преобразует строку Unicode без префикса N из Unicode в кодовую страницу базы данных SQL Server, любые символы в строке Unicode, не существующие в кодовой странице SQL Server, будут потеряны».
http://support.microsoft.com/kb/239530
Я предполагаю, что локальный экземпляр sqlserver каким-то образом обрабатывает все входящие строковые литералы как строки Unicode, а удаленный сервер - нет, поэтому требует префикса N.
Возможно, это была серьезная ошибка (не зная о необходимости префикса N), но я ежедневно работаю с mysql, а не с mssql.