2008-10-03 6 views
1

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

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

ответ

4

Синтаксис N - это то, как вы указываете строковый литерал юникода в SQL Server.

N'Unicode string' 
'ANSI string' 

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

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

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

2

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

1

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

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

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

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

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

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

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

2

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