Partilhar via


Escrever Declarações Transact-SQL Internacionais

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Base de dados SQL no Microsoft Fabric

Bases de dados e aplicações de bases de dados que utilizam instruções Transact-SQL tornar-se-ão mais portáteis de uma língua para outra, ou suportarão múltiplas línguas, se forem seguidas as seguintes diretrizes:

  • A partir do SQL Server 2019 (15.x) e no Azure SQL Database, utilize um:

    • Os tipos de dados char, varchar e varchar(max) com uma colação habilitada para UTF-8, e os dados são codificados usando UTF-8.
    • Os tipos de dados nchar, nvarchar e nvarchar(max ) com caracteres suplementares (SC) permitiram a colação, e os dados são codificados usando UTF-16. A utilização de uma colação não-SC resulta na codificação dos dados usando UCS-2.

    Isto evita problemas de conversão de páginas de código. Para outras considerações, veja Diferenças de armazenamento entre UTF-8 e UTF-16.

  • Até ao SQL Server 2017 (14.x), substituir todas as utilizações dos tipos de dados char, varchar e varchar(max) por nchar, nvarchar e nvarchar(max). Se usar uma colação habilitada por caracteres suplementares (SC), os dados são codificados usando UTF-16. A utilização de uma colação não-SC resulta na codificação dos dados usando UCS-2. Isto evita problemas de conversão de páginas de código. Para obter mais informações, consulte Collation and Unicode Support.

    Importante

    O tipo de dado de texto está obsoleto e não deve ser utilizado em novos trabalhos de desenvolvimento. Planeio converter os dados de texto para varchar(max).

  • Ao fazer comparações e operações de mês e dia de semana, use as partes numéricas de data em vez das cadeias de nomes. Diferentes definições linguísticas devolvem nomes diferentes para os meses e dias úteis. Por exemplo, DATENAME(MONTH,GETDATE()) retorna May quando a língua está definida para inglês dos EUA, retorna Mai quando a língua está definida para alemão, e retorna mai quando a língua está definida para francês. Em vez disso, use uma função como o DATEPART , que utiliza o número do mês em vez do nome. Use os nomes DATEPART ao construir conjuntos de resultados para serem exibidos a um utilizador, porque os nomes das datas são frequentemente mais significativos do que uma representação numérica. No entanto, não programes nenhuma lógica que dependa de os nomes apresentados serem de uma língua específica.

  • Quando especifica datas em comparações ou para entrada de instruções INSERT ou UPDATE, use constantes que são interpretadas da mesma forma para todas as definições de linguagem:

    • As aplicações ADO, OLE DB e ODBC devem usar as cláusulas de escape ODBC para timestamp, data e tempo de:

      { ts'yyyy-mm-ddhh:mm:ss [.fff] '} tal como: { ts'1998-09-24 10:02:20'}

      { d'yyyy--dd'} como: { d'1998-09-24'}

      { t'hh:mm:ss'} como: { t'10:02:20'}

    • Aplicações que utilizam outras APIs, ou scripts Transact-SQL, procedimentos armazenados e triggers, devem usar as cadeias numéricas não separadas. Por exemplo, yyyymmdd como 19980924.

    • Aplicações que utilizam outras APIs, ou scripts Transact-SQL, procedimentos armazenados e triggers devem usar a instrução CONVERT com um parâmetro de estilo explícito para todas as conversões entre os tipos de dados time, date, smalldate, datetime, datetime2 e datetimeoffset, bem como os tipos de dados de cadeia de caracteres. Por exemplo, a seguinte instrução é interpretada da mesma forma para todas as definições de ligação de língua ou formato de data:

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

Consulte também

CAST e CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Suporte à Coletão e Unicode