Sdílet prostřednictvím


UNISTR (Transact-SQL)

platí pro:azure SQL Database

UNISTR poskytuje podporu řetězcových literálů Unicode tím, že umožňuje zadat hodnotu kódování Unicode znaků v řetězci. UNISTR vrátí znaky Unicode odpovídající vstupnímu výrazu definovanému standardem Unicode.

Řídicí sekvenci znaku Unicode lze zadat ve formě \xxxx nebo \+xxxxxx, kde xxxx je platná hodnota znakového bodu UTF-16 a xxxxxx je platná hodnota znakového bodu Unicode. Hodnoty kódu Unicode můžete vyhledat v Unicode Code Charts.

V porovnání s funkcemi jako NCHARposkytuje UNISTR flexibilnější a komplexnější způsob zpracování znaků Unicode. Zatímco NCHAR může například převést jednu hodnotu Unicode na znak, UNISTR zpracovává více hodnot Unicode a řídicí sekvence, což usnadňuje práci se složitými řetězci, které obsahují různé znaky Unicode.

Transact-SQL konvence syntaxe

Syntax

UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )

Poznámky

Mezi klíčové výhody UNISTR patří:

  • Podpora řídicích sekvencí Unicode: UNISTR umožňuje zadat znaky Unicode pomocí řídicích sekvencí.

  • flexibilita se vstupními typy: podporuje různé typy znaků, jako jsouchar , nchar, varchara nvarchar. Pro znak a varchar datových typů by kolace měla být platná kolace UTF-8.

  • vlastní řídicí znaky: Můžete definovat vlastní řídicí znak pro provedení nezbytného převodu hodnot Unicode na řetězcovou znakovou sadu.

Podpora znakové stránky

Funkce UNISTR není kompatibilní se staršími znakovými stránkami, což znamená, že nepodporuje kolace, které používají znakové sady jiné než Unicode. Tato kolace se staršími kódovými stránkami je možné identifikovat pomocí následujícího dotazu.

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 */
);

Další informace najdete v dodatku G DBCS/Unicode Mapování tabulek a dodatek H kódových stránek.

Argumenty

'character_expression'

Výraz libovolného typu znaku, například znak, nchar, varcharnebo nvarchar. Pro znak a varchar datových typů by kolace měla být platná kolace UTF-8. Můžete zadat řetězcové literály nebo hodnoty kódu UTF-16 nebo obojí. podporuje délku varchar(max) a nvarchar(max).

N'unicode_escape_character'

Jeden znak představující uživatelsky definovanou řídicí sekvenci Unicode. Pokud není zadána, výchozí hodnota je \.

Návratové typy

Řetězcová hodnota, jejíž délka a typ závisí na vstupních typech.

Příklady

A. Použití UNISTR vs. funkce NCHAR

V následujících příkladech se všechny používají funkce UNISTR k provedení nezbytného převodu hodnot Unicode na řetězcovou znakovou sadu, aby se zobrazil znak unicode Smiling Face With Open Mouth. Kolace databáze musí být kolace UTF-8, pokud je vstup znak nebo varchar datových typů.

Použití UNISTR a NCHAR:

SELECT N'Hello! ' + NCHAR(0xd83d) + NCHAR(0xde00);

Tento ukázkový příklad lze také napsat:

SELECT UNISTR(N'Hello! \D83D\DE00');
SELECT UNISTR(N'Hello! \+01F603');

Tady je sada výsledků.

-----------
Hello! 😃

B. Použití funkce UNISTR s uživatelem definovaným řídicím znakem

Následující příklad používá funkci UNISTR s vlastním řídicím znakem k provedení nezbytného převodu Unicode na znakovou sadu řetězců.

SELECT UNISTR(N'ABC#00C0#0181#0187', '#');

Tady je sada výsledků.

-----------
ABCÀƁƇ

C. Použití funkce UNISTR kombinováním řetězcových literálů a bodů kódu Unicode

V následujícím příkladu se UNISTR používá s uživatelsky definovaným řídicím znakem ($) a datovým typem varchar s kolací UTF-8. Kombinuje řetězcové literály s hodnotou kódu Unicode:

SELECT UNISTR('I $2665 Azure SQL.' COLLATE Latin1_General_100_CI_AS_KS_SC_UTF8, '$');

Tady je sada výsledků.

------------------
I ♥ Azure SQL.

D. Použití funkce UNISTR pro znaky nad limit UTF-8

Pokud potřebujete použít znakovou sadu nad rámec UTF-8, musíte pomocí klauzule COLLATE převést posloupnost znaků na UTF-8. Tady je příklad:

SELECT UNISTR('\306F\3044' COLLATE Latin1_General_100_BIN2_UTF8) AS Yes_in_Japanese_Hiragana;

Tady je sada výsledků.

Yes_in_Japanese_Hiragana
------------------------
はい
  • ASCII (Transact-SQL)
  • ZNAK (Transact-SQL)
  • NCHAR (Transact-SQL)
  • řetězcové funkce (Transact-SQL)
  • podpora kolace a kódování Unicode