Здавалка
Главная | Обратная связь

Программирование на стороне сервера



Чтобы база данных правильно работала с кодировкой Юникод, помимо использования типов данных 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 Все права принадлежат авторам размещенных материалов.