Предотвращение изменения кода с помощью Microsoft SQLServer и Unicode - PullRequest
1 голос
/ 03 октября 2008

Как заставить сервер MSSQL принимать данные Unicode по умолчанию в столбцы VARCHAR или NVARCHAR?

Я знаю, что вы можете сделать это, поместив N перед строкой, которая будет помещена в поле, но, честно говоря, это выглядит немного архаично в 2008 году и особенно при использовании SQL Server 2005.

Ответы [ 4 ]

4 голосов
/ 03 октября 2008

Синтаксис N - это способ указания строкового литерала Юникода в SQL Server.

N'Unicode string'
'ANSI string'

SQL Server будет автоматически преобразовывать эти два значения, когда это возможно, используя параметры сортировки столбцов или базы данных.

Таким образом, если ваши строковые литералы на самом деле не содержат символов Юникода, вам не нужно указывать префикс N.

Но если ваши строковые литералы do содержат символы Юникода, тогда необходимо использовать префикс N.

2 голосов
/ 05 ноября 2009

Им действительно нужен способ отключить необходимость префикса N ''. Аргумент «это необходимо для обратной совместимости» не имеет смысла для меня - конечно, сделайте это поведение по умолчанию для старых приложений, но предоставьте мне возможность включить строки Unicode по умолчанию (т.е. префикс N '' не требуется) Я обнаружил, что мне нужно переходить к большим областям моего приложения, чтобы адаптироваться к Unicode на SQL Server, когда это НЕ является проблемой в Oracle и Postgresql. Да ладно, Microsoft!

2 голосов
/ 03 октября 2008

Если это веб-приложение, вы, вероятно, могли бы заставить свой веб-сервер использовать UTF8 в качестве кодировки по умолчанию. Таким образом, все данные в браузере и обратно будут UTF8, которые можно вставить в поля VARCHAR. UTF8 - это хороший способ заставить приложения, которые не знают Unicode, справиться с этим.

1 голос
/ 24 ноября 2008

Хотя вы можете просто хранить содержимое UTF8 в поле VARCHAR на MSSQL Server, если перевод кодировки не выполняется, вы должны знать, что:

  1. Никакие инструменты управления / отчетности / данных за пределами вашего приложения не смогут понять ваши неанглийские символы.

  2. Работа с конкретным языком, например сортировка списка имен, может выполняться не в порядке, приемлемом для каждого языка.

  3. Необходимо быть осторожным с усечением данных. Усечение многобайтового символа UTF8 обычно приводит к повреждению данных для соответствующего символа. Вы должны всегда отклонять ввод, если он превышает длину поля.

  4. Может быть не так просто, как вы думаете, отключить преобразование кодировки. Даже если вы отключите его в своем клиентском драйвере, он все равно может быть переопределен в некоторых случаях, если между клиентом и RDBMS существует значительная языковая разница используемая кодовая страница, которая мгновенно приводит к повреждению данных.

  5. Если вы думаете, что это все, что вам придется беспокоиться о том, чтобы обмануть себя.

В целом, хотя вы можете испытать искушение пойти по этому пути, это не очень хорошая идея. При переходе на многобайтовый код необходимо изменить код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...