Udostępnij za pomocą


Pisanie międzynarodowych instrukcji Transact-SQL

Dotyczy do:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSystem Platform Analitycznych (PDW)Baza danych SQL w Microsoft Fabric

Bazy danych i aplikacje bazy danych korzystające z instrukcji Transact-SQL staną się bardziej przenośne z jednego języka do innego lub będą obsługiwać wiele języków, jeśli zostaną spełnione następujące wskazówki:

  • Począwszy od programu SQL Server 2019 (15.x) i usługi Azure SQL Database, użyj jednego z następujących elementów:

    • Typy danych char, varchar i varchar(max) z włączonym zestawieniem znaków UTF-8, a dane są kodowane przy użyciu UTF-8.
    • Typy danych nchar, nvarchar i nvarchar(max) z sortowaniem obsługującym dodatkowe znaki (SC), a dane są kodowane przy użyciu formatu UTF-16. Użycie sortowania innego niż SC powoduje kodowanie danych przy użyciu protokołu UCS-2.

    Pozwala to uniknąć problemów z konwersją strony kodowej. Aby zapoznać się z innymi zagadnieniami, zobacz Różnice w przechowywaniu między UTF-8 i UTF-16.

  • Do wersji SQL Server 2017 (14.x) zastąp wszystkie zastosowania typów danych char, varchar i varchar(max) typami nchar, nvarchar oraz nvarchar(max). W przypadku używania sortowania z włączonym znakiem dodatkowym (SC) dane są kodowane przy użyciu formatu UTF-16. Użycie sortowania innego niż SC powoduje kodowanie danych przy użyciu protokołu UCS-2. Pozwala to uniknąć problemów z konwersją strony kodowej. Aby uzyskać więcej informacji, zobacz Sortowanie i obsługa Unicode.

    Ważne

    Typ danych tekstowych jest przestarzały i nie powinien być używany w nowych pracach programistycznych. Zaplanuj konwertowanie danych tekstowych na varchar(max).

  • Podczas wykonywania porównań i operacji dotyczących miesięcy i dni tygodnia, używaj liczbowych części daty zamiast ciągów nazw. Różne ustawienia języka zwracają różne nazwy miesięcy i dni tygodnia. Na przykład DATENAME(MONTH,GETDATE()) zwraca wartość May , gdy język jest ustawiony na angielski w USA, zwraca Mai wartość , gdy język jest ustawiony na niemiecki i zwraca mai wartość , gdy język jest ustawiony na francuski. Zamiast tego należy użyć funkcji, takiej jak DATEPART , która używa liczby miesięcy zamiast nazwy. Użyj nazw DATEPART podczas tworzenia zestawów wyników, które mają być wyświetlane użytkownikowi, ponieważ nazwy dat są często bardziej znaczące niż reprezentacja liczbowa. Nie koduj jednak żadnej logiki, która zależy od wyświetlanych nazw z określonego języka.

  • Po określeniu dat w porównaniach lub dla danych wejściowych instrukcji INSERT lub UPDATE użyj stałych, które są interpretowane w taki sam sposób dla wszystkich ustawień języka:

    • Aplikacje ADO, OLE DB i ODBC powinny używać klauzul ucieczki ODBC dla sygnatury czasowej, daty i godziny.

      { ts'rrrr-mm-ddhh:mm:ss [.fff] '} na przykład: { ts'1998-09-24 10:02:20'}

      { d'rrrr-mm-dd'} na przykład: { d'1998-09-24'}

      { t'hh:mm:ss'} na przykład: { t'10:02:20'}

    • Aplikacje korzystające z innych interfejsów API lub skryptów Transact-SQL, procedur składowanych i wyzwalaczy powinny używać niesepatycznych ciągów liczbowych. Na przykład yyyymmddd jako 19980924.

    • Aplikacje korzystające z innych interfejsów API lub skryptów Transact-SQL, procedur składowanych i wyzwalaczy powinny używać instrukcji CONVERT z jawnym parametrem stylu dla wszystkich konwersji pomiędzy typami danych time, date, smalldate, datetime, datetime2 i datetimeoffset a typami danych ciągu znaków. Na przykład następująca instrukcja jest interpretowana w taki sam sposób dla wszystkich ustawień języka lub formatu daty połączenia:

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

Zobacz także

RZUTOWANIE i konwertowanie (Transact-SQL)
DATEPART (Transact-SQL)
Obsługa sortowania i Unicode