Программирование на стороне сервера
Чтобы база данных правильно работала с кодировкой Юникод, помимо использования типов данных nchar, nvarchar и nvarchar(max) для определения хранилища данных в кодировке Юникод, необходимо определить взаимодействие с клиентом, работающим с кодировкой Юникод. Взаимодействие с клиентом в рамках кодировки Юникод можно определить, выполнив на сервере базы данных следующие действия. Переключитесь с типов данных, не поддерживающих Юникод, на типы, поддерживающие его, в столбцах таблицы и в операциях CONVERT() и CAST(). Замените используемые функции ASCII() и CHAR() на их эквиваленты, поддерживающие Юникод, UNICODE() и NCHAR(). Определите переменные и параметры хранимых процедур и триггеров в кодировке Юникод. Установите префикс символьных строковых констант в кодировке Юникод в виде буквы N. Использование UNICODE(), NCHAR() и других функций Функция ASCII() возвращает код символа, введенного не в Юникоде. Поэтому следует использовать аналогичную функцию UNICODE() для строк в Юникоде там же, где использовалась бы функция ASCII() для строк не в Юникоде. То же самое справедливо для функции CHAR(); ее аналогом в Юникоде является NCHAR(). Так как функция SOUNDEX() определяется на основе английских фонетических правил, для строк в Юникоде это роли не играет, если они содержат только символы латиницы от A до Z и от a до z. Функции ASCII(), CHAR() и SOUNDEX() могут использоваться с параметрами в Юникоде, но эти аргументы будут неявно преобразовываться к строкам других кодовых страниц. Это может привести к возможным потерям символов Юникода перед обработкой, так как данные функции по определению работают со строками кодовых страниц, отличных от Юникода. Кроме функций UNICODE() и NCHAR(), следующие строковые функции поддерживают Юникод там, где это возможно: CHARINDEX(), LEFT(), LEN(), UPPER(), LOWER(), LTRIM(), RTRIM(), PATINDEX(), REPLACE(), QUOTENAME(), REPLICATE(), REVERSE(), STUFF(), SUBSTRING(), UNICODE(). Эти функции принимают аргументы в Юникоде, используют для каждого символа строк Юникода по два байта, и применяют правила сортировки Юникода для операций сравнения строк, когда входные параметры находятся в формате Юникод. Определение параметров хранимых процедур Определение параметров в типе данных Юникод гарантирует, что запросы клиента или входные данные будут неявно преобразованы на сервере в Юникод и не будут повреждены при обработке. Если параметр определен как параметр OUTPUT, то тип данных Юникода минимизирует вероятность повреждения параметра на его обратном пути к клиенту. В следующей хранимой процедуре переменная объявлена в типе данных Юникод. CREATE PROCEDURE Product_Info @name nvarchar(40) AS SELECT p.ListPrice, v.Name FROM Production.Product p INNER JOIN Purchasing.ProductVendor pv ON p.ProductID = pv.ProductID INNER JOIN Purchasing.Vendor v ON pv.VendorID = v.VendorID WHERE p.Name = @name; Использованиепрефикса N Строковые константы в Юникоде, которые могут быть указаны в коде, выполняемом на сервере (в хранимых процедурах и триггерах), должны предваряться прописной буквой N. Это должно быть справедливо даже в том случае, если столбец, на который они ссылаются, уже определен с поддержкой Юникода. Без префикса N строка будет преобразована в установленную по умолчанию кодовую страницу базы данных. При этом некоторые символы могут неверно определиться. Например, созданная в прошлом примере хранимая процедура может выполниться на сервере следующим образом: EXECUTE Product_Info @name = N'Chain'.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|