UNISTR (Transact-SQL)
Применимо к: База данных SQL Azure
UNISTR
обеспечивает поддержку строковых литералах Юникода, позволяя указать значение кодировки Юникода символов в строке.
UNISTR
возвращает символы Юникода, соответствующие входным выражениям, как определено стандартом Юникода.
Escape-последовательность для символа Юникода может быть указана в виде \xxxx
или \+xxxxxx
, где xxxx
допустимое значение точки кода UTF-16 и xxxxxx
является допустимым значением кодовой точки Юникода. Значения точек кода Юникода можно найти в диаграммах кода Юникода.
По сравнению с такими функциями, как NCHAR
, UNISTR
обеспечивает более гибкий и комплексный способ обработки символов Юникода. Например, в то время как NCHAR
может преобразовать одно значение Юникода в символ, UNISTR
обрабатывает несколько значений Юникода и escape-последовательностей, что упрощает работу со сложными строками, включающими различные символы Юникода.
Соглашения о синтаксисе Transact-SQL
Синтаксис
UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )
Замечания
К ключевым преимуществам UNISTR
относятся:
Поддержка escape-последовательностей Юникода:
UNISTR
позволяет указывать символы Юникода с помощью escape-последовательностейГибкость с типами ввода:
UNISTR
поддерживает различные типы символов, такие как char, nchar, varcharи nvarchar. Для типов данных char и varchar параметры сортировки должны быть допустимыми параметрами сортировки UTF-8.Пользовательские escape-символы: можно определить пользовательский escape-символ для выполнения необходимого преобразования значений Юникода в строковый набор символов.
Поддержка кодовой страницы
Функция UNISTR
несовместима с устаревшими кодовых страницами, т. е. не поддерживает параметры сортировки, использующие наборы символов, отличных от Юникода. Эти параметры сортировки с устаревшими кодовых страницами можно определить с помощью следующего запроса.
SELECT DISTINCT p.language,
p.codepage
FROM sys.fn_helpcollations() AS c
CROSS APPLY (VALUES (LEFT(c.name, CHARINDEX('_', c.name) - 1),
COLLATIONPROPERTY(c.name, 'codepage'))) AS p(language, codepage)
WHERE p.codepage NOT IN (
0 /* Unicode Only collation */,
65001 /* UTF-8 code page */
);
Дополнительные сведения см. в приложении G DBCS/Юникод сопоставления таблиц и приложения H Code Pages.
Аргументы
"character_expression"
Выражение любого типа символа, например char, nchar, varchar или nvarchar. Для типов данных char и varchar параметры сортировки должны быть допустимыми параметрами сортировки UTF-8. Можно указать строковые литералы или значения точек кода Юникода или UTF-16 или обоих.
character_expression
поддерживает длину как varchar(max) и nvarchar(max).
N'unicode_escape_character'
Один символ, представляющий определяемую пользователем последовательность escape-кода Юникода. Если этот параметр не указан, значение по умолчанию равно \
.
Типы возвращаемых данных
Строковое значение, длина и тип которого зависят от типов входных данных.
Примеры
А. Использование ЮНИСТР и функции NCHAR
В следующих примерах все функции используются UNISTR
для выполнения необходимого преобразования значений Юникода в строковый набор символов, чтобы отобразить символ юникода, улыбающийся лицом с открытым ротом. Параметры сортировки базы данных должны быть параметрами сортировки UTF-8, если входные данные являются типами данных char или varchar .
При использовании UNISTR
и NCHAR
:
SELECT N'Hello! ' + NCHAR(0xd83d) + NCHAR(0xde00);
Этот пример также можно записать:
SELECT UNISTR(N'Hello! \D83D\DE00');
SELECT UNISTR(N'Hello! \+01F603');
Вот результирующий набор.
-----------
Hello! 😃
B. Использование функции UNISTR с определяемым пользователем escape-символом
В следующем примере функция используется UNISTR
с пользовательским escape-символом для выполнения необходимого преобразования Юникода в строковый набор символов.
SELECT UNISTR(N'ABC#00C0#0181#0187', '#');
Вот результирующий набор.
-----------
ABCÀƁƇ
C. Использование функции UNISTR путем объединения строковых литералом и точек кода Юникода
В следующем примере UNISTR
используется с определяемым пользователем escape-символом ($
) и типом данных varchar varchar с параметрами сортировки UTF-8. Он объединяет строковые литералы со значением codepoint Юникода:
SELECT UNISTR('I $2665 Azure SQL.' COLLATE Latin1_General_100_CI_AS_KS_SC_UTF8, '$');
Вот результирующий набор.
------------------
I ♥ Azure SQL.
D. Использование функции UNISTR для символов за пределами ограничения UTF-8
Если необходимо использовать набор символов за пределами UTF-8, необходимо преобразовать последовательность символов в UTF-8 с помощью предложения COLLATE
. Ниже приведен пример:
SELECT UNISTR('\306F\3044' COLLATE Latin1_General_100_BIN2_UTF8) AS Yes_in_Japanese_Hiragana;
Вот результирующий набор.
Yes_in_Japanese_Hiragana
------------------------
はい