Sdílet prostřednictvím


UNISTR (Transact-SQL)

Platí pro: SQL Server 2025 (17.x) Azure SQL Database Azure SQLManaged InstanceSQL Database v Microsoft Fabric

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.

Note

UNISTRje k dispozici ve službě Azure SQL Managed Instance se zásadami aktualizaceSQL Serveru 2025 nebo Always-up-to-date.

Transact-SQL konvence syntaxe

Syntax

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

Remarks

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.

Operátor || kanálů je k dispozici ve službě Azure SQL Managed Instance nakonfigurované pomocí zásad aktualizaceSQL Serveru 2025 nebo Always-up-to-date.

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.

Arguments

'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.

Examples

A. Použití UNISTR vs. funkce NCHAR

Následující příklady všechny používají UNISTR funkce 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
------------------------
はい