Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




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

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных