Перенос существующего приложения на использование Unicode

StackOverflow https://stackoverflow.com/questions/81587

Вопрос

Мы находимся в процессе обновления нашего приложения до полной совместимости с Юникодом, поскольку недавно мы получили Delphi 2009, который предоставляет это "из коробки".Я ищу всех, у кого есть опыт обновления приложения для приема символов Юникода.Конкретно отвечает на любой из следующих вопросов.

  • Нам нужно изменить VarChars на NVarchar, Char на NChar.Есть ли здесь какие-нибудь подводные камни?
  • Нам нужно обновить все инструкции sql, чтобы включить N перед любыми строками sql.Таким образом, обновление tbl_Customer set Name = 'Smith' должно стать обновлением tbl_Customer set Name = N"Смит" .Есть ли какой-нибудь способ установить это значение по умолчанию для определенных полей?Кажется невероятным, что это все еще требуется.
  • Можно ли настроить какие-либо значения по умолчанию в SQLServer, которые упростят это?

ps Нам также необходимо обновить наш код Oracle

Это было полезно?

Решение

Oracle не требует, чтобы вы использовали nvarchar для хранения строк в Юникоде — сервер может быть настроен для хранения varchar2 в формате UTF-8.Если раньше вы поддерживали только ASCII, он должен быть прозрачным.Это должно предотвратить необходимость выполнения всего поиска и замены на стороне приложения для ' Для N'.

Что касается точки зрения Дэмиена:возможно, сейчас это вам не поможет, но вы действительно должны сделать приоритетом избавление от непараметризованных запросов.Они являются не чем иным, как тормозом для вашей системы с точки зрения технического обслуживания, производительности и безопасности.

Другие советы

Очевидно, что для SQL Server ограничения для nchar / nvarchar составляют половину от их аналогов char / varchar (если только вы не перенесете все > 4000 в nvarchar (максимум))

Дэмиен

Я не уверен, насколько полезен ваш ответ.У нас есть большая скомпилированная кодовая база в 700 000 строк, написанная за последние десять лет и содержащая большое количество sql-запросов.Большинство из них стандартизированы вплоть до нескольких функций, которые являются основой для большинства обновлений базы данных.Они могут быть обновлены довольно просто.Однако нам также нужно проверить каждое предложение where на наличие CustomerName = '%s', которое теперь должно быть CustomerName = N'%s'

Это реальный вопрос, который нуждается в реальном ответе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top