Sdílet prostřednictvím


Psaní mezinárodních Transact-SQL příkazů

Platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Databáze a databázové aplikace, které používají příkazy Transact-SQL, budou přenosnější z jednoho jazyka do jiného nebo budou podporovat více jazyků, pokud jsou dodrženy následující pokyny:

  • Počínaje SQL Serverem 2019 (15.x) a v Azure SQL Database použijte:

    • Datové typy char, varchar, a varchar(max) s povolenou kolací UTF-8 a data se kódují pomocí UTF-8.
    • Datové typy nchar, nvarchar a nvarchar(max) s kolací podporující doplňkové znaky (SC) a data se kódují pomocí UTF-16. Použití kolace jiného typu než SC vede ke kódování dat pomocí UCS-2.

    Tím se zabrání problémům s konverzí znakové sady. Pro další úvahy viz Rozdíly mezi UTF-8 a UTF-16.

  • Až SQL Server 2017 (14.x), nahraďte všechna použití datových typů char, varchar a varchar(max)nchar, nvarchar a nvarchar(max). Pokud používáte kolaci s povolenými doplňkovými znaky (SC), data se kódují pomocí UTF-16. Použití kolace jiného typu než SC vede ke kódování dat pomocí UCS-2. Tím se zabrání problémům s převodem znakových stránek. Další informace naleznete v tématu Kolace a Podpora kódování Unicode.

    Důležité

    Textový datový typ je zastaralý a neměl by se používat v nové vývojové práci. Naplánujte převod textových dat na varchar(max).

  • Při provádění porovnání a operací mezi měsíci a dny v týdnu použijte místo řetězců názvů číselné části kalendářních dat. Různá jazyková nastavení vracejí různá jména pro měsíce a pracovní dny. Například, vrátí DATENAME(MONTH,GETDATE())May, když je jazyk nastaven na americkou angličtinu, vrátí Mai, když je jazyk nastaven na němčinu, a vrátí mai, když je jazyk nastaven na francouzštinu. Místo názvu použijte funkci, například DATEPART , která místo názvu používá číslo měsíce. Názvy DATEPART použijte při vytváření sad výsledků, které se mají zobrazit uživateli, protože názvy kalendářních dat jsou často smysluplnější než číselné vyjádření. Nezakódujte ale žádnou logiku, která závisí na zobrazovaných názvech z určitého jazyka.

  • Když zadáte data v porovnáních nebo pro vstup do příkazů INSERT nebo UPDATE, použijte konstanty, které jsou interpretovány stejným způsobem pro všechna jazyková nastavení:

    • Aplikace ADO, OLE DB a ODBC by měly používat časovou únikovou sekvenci ODBC pro razítko, datum a čas:

      { ts'yyyy-mm-ddhh:mm:ss [.fff] '} například: { ts'1998-09-24 10:02:20'}

      { d'yyyy-mm-dd'} například: { d'1998-09-24'}

      { t'hh:mm:ss'} například: { t'10:02:20'}

    • Aplikace, které používají jiná rozhraní API nebo Transact-SQL skripty, uložené procedury a triggery, by měly používat neoddělené číselné řetězce. Například yyyymmdd jako 19980924.

    • Aplikace, které používají jiná rozhraní API nebo Transact-SQL skripty, uložené procedury a triggery, by měly používat příkaz CONVERT se stylovým parametrem pro všechny převody mezi time, date, smalldate, datetime, datetime2, a datetimeoffset datovými typy a datovými typy znakových řetězců. Následující příkaz se například interpretuje stejným způsobem pro všechna nastavení připojení ve formátu jazyka nebo data:

      SELECT *  
      FROM AdventureWorks2022.Sales.SalesOrderHeader  
      WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)  
      

Viz také

CAST a CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Podpora kolace a kódování Unicode