UNISTR (Transact-SQL)
Dotyczy:azure SQL Database
UNISTR
zapewnia obsługę literałów ciągów Unicode, umożliwiając określenie wartości kodowania Unicode znaków w ciągu.
UNISTR
zwraca znaki Unicode odpowiadające wyrażeniu wejściowemu zgodnie ze standardem Unicode.
Sekwencja ucieczki znaku Unicode może być określona w postaci \xxxx
lub \+xxxxxx
, gdzie xxxx
jest prawidłową wartością punktu kodu UTF-16, a xxxxxx
jest prawidłową wartością punktu kodu Unicode. Wartości punktów kodu Unicode można wyszukać na wykresach kodu Unicode .
W porównaniu z funkcjami takimi jak NCHAR
, UNISTR
zapewnia bardziej elastyczny i kompleksowy sposób obsługi znaków Unicode. Na przykład podczas NCHAR
można przekonwertować pojedynczą wartość Unicode na znak, UNISTR
obsługuje wiele wartości Unicode i sekwencji ucieczki, co ułatwia pracę ze złożonymi ciągami zawierającymi różne znaki Unicode.
Transact-SQL konwencje składni
Składnia
UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )
Uwagi
Najważniejsze korzyści z UNISTR
obejmują:
Obsługa sekwencji ucieczki Unicode:
UNISTR
umożliwia określanie znaków Unicode przy użyciu sekwencji ucieczkielastyczność z typami wejściowymi :obsługuje różne typy znaków, takie jak znaków, nchar ,varchar invarchar . W przypadku typów danychznaków i varchar sortowanie powinno być prawidłowym sortowaniem UTF-8.niestandardowe znaki ucieczki: można zdefiniować niestandardowy znak ucieczki, aby wykonać niezbędną konwersję wartości Unicode na zestaw znaków ciągu.
Obsługa strony kodowej
Funkcja UNISTR
nie jest zgodna ze starszymi stronami kodu, co oznacza, że nie obsługuje sortowania używających zestawów znaków innych niż Unicode. Te sortowania ze starszymi stronami kodu można zidentyfikować przy użyciu następującego zapytania.
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 */
);
Aby uzyskać więcej informacji, zobacz Dodatek G DBCS/Unicode mapowania tabel i dodatek H Code Pages.
Argumenty
'character_expression'
Wyrażenie dowolnego typu znaku, takie jak char, nchar, varcharlub nvarchar. W przypadku typów danych character_expression
obsługuje długość tak dużą, jak varchar(max) i nvarchar(max).
N'unicode_escape_character'
Pojedynczy znak reprezentujący sekwencję ucieczki Unicode zdefiniowaną przez użytkownika. Jeśli nie zostanie podana, wartość domyślna to \
.
Typy zwracane
Wartość ciągu, której długość i typ zależą od typów wejściowych.
Przykłady
A. Używanie funkcji UNISTR a NCHAR
W poniższych przykładach wszystkie używają funkcji UNISTR
do wykonania niezbędnej konwersji wartości Unicode na zestaw znaków ciągu, aby wyświetlić znak Unicode Uśmiechnięta twarz z otwartymi ustami. Sortowanie bazy danych musi być sortowaniem UTF-8, jeśli dane wejściowe są char lub varchar typów danych.
Używanie UNISTR
i NCHAR
:
SELECT N'Hello! ' + NCHAR(0xd83d) + NCHAR(0xde00);
Ten przykładowy przykład można również napisać:
SELECT UNISTR(N'Hello! \D83D\DE00');
SELECT UNISTR(N'Hello! \+01F603');
Oto zestaw wyników.
-----------
Hello! 😃
B. Używanie funkcji UNISTR z znakiem ucieczki zdefiniowanym przez użytkownika
W poniższym przykładzie użyto funkcji UNISTR
z niestandardowym znakiem ucieczki, aby wykonać niezbędną konwersję Unicode na zestaw znaków ciągu.
SELECT UNISTR(N'ABC#00C0#0181#0187', '#');
Oto zestaw wyników.
-----------
ABCÀƁƇ
C. Używanie funkcji UNISTR przez łączenie literałów ciągów i punktów kodu Unicode
W poniższym przykładzie UNISTR
jest używana z zdefiniowanym przez użytkownika znakiem ucieczki ($
) i typem danych varchar z sortowaniem UTF-8. Łączy literały ciągów z wartością punktu kodu Unicode:
SELECT UNISTR('I $2665 Azure SQL.' COLLATE Latin1_General_100_CI_AS_KS_SC_UTF8, '$');
Oto zestaw wyników.
------------------
I ♥ Azure SQL.
D. Używanie funkcji UNISTR dla znaków przekraczających limit UTF-8
Jeśli musisz użyć zestawu znaków poza utF-8, musisz przekonwertować sekwencję znaków na UTF-8 przy użyciu klauzuli COLLATE
. Oto przykład:
SELECT UNISTR('\306F\3044' COLLATE Latin1_General_100_BIN2_UTF8) AS Yes_in_Japanese_Hiragana;
Oto zestaw wyników.
Yes_in_Japanese_Hiragana
------------------------
はい
Powiązana zawartość
- ASCII (Transact-SQL)
- CHAR (Transact-SQL)
- NCHAR (Transact-SQL)
- funkcje ciągów (Transact-SQL)
- Obsługa sortowania i Unicode