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





Если это веб-приложение, вы, вероятно, можете заставить свой веб-сервер использовать UTF8 в качестве кодировки по умолчанию. Таким образом, все данные в браузере будут передаваться в формате UTF8, который можно вставить в поля VARCHAR. UTF8 - хороший способ заставить приложения, не поддерживающие Unicode, справляться с ним.
Синтаксис N - это то, как вы указываете строковый литерал Unicode в SQL Server.
N'Unicode string'
'ANSI string'
SQL Server будет автоматически преобразовывать между ними, когда это возможно, используя либо сортировку столбца, либо сортировку базы данных.
Поэтому, если ваши строковые литералы на самом деле не содержат символов Юникода, вам не нужно указывать префикс N.
Но если ваши строковые литералы делать содержат символы Unicode, тогда использование префикса N необходимо.
Хотя вы можете просто хранить содержимое UTF8 в поле VARCHAR на сервере MSSQL, если перевод кодировки не выполняется, вы должны знать, что:
Никакие инструменты управления / отчетности / данных вне вашего приложения не смогут понять ваши неанглийские символы.
Обработка, зависящая от языка, такая как сортировка списка имен, может выполняться не в порядке, приемлемом для каждого языка.
Будьте осторожны с усечением данных. Усечение многобайтового символа UTF8 обычно вызывает повреждение данных соответствующего символа. Вы всегда должны отклонять ввод, если он превышает длину поля.
Это может быть не так просто, как вы думаете, отключить преобразование кодировки ... Даже если вы отключите его в своем клиентском драйвере, в некоторых случаях он все равно может быть отменен, если существует значительная разница в локали между клиентской и используемой кодовой страницей СУБД, что мгновенно приводит повреждение данных.
Если вы думаете, что это все, вам придется беспокоиться о том, что вы обманываете себя.
Таким образом, хотя у вас может возникнуть соблазн пойти по этому пути, это не лучшая идея. При переходе к многобайтовой передаче требуется изменение кода.
Им действительно нужен способ отключить префикс N ''. Аргумент «это необходимо для обратной совместимости» не имеет для меня никакого смысла - конечно, сделайте это поведение по умолчанию для старых приложений, но предоставьте мне возможность включить строки Unicode по умолчанию (т.е. префикс N '' не требуется). Я обнаружил, что мне нужно пойти и возиться с большими областями моего приложения, чтобы адаптироваться к Unicode на SQL Server, когда это НЕ является проблемой в Oracle и Postgresql. Да ладно, Microsoft!