Gravar instruções Transact-SQL internacionais

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Banco de dados SQL no Microsoft Fabric

Os bancos de dados e aplicativos de bancos de dados que usarem instruções Transact-SQL se tornarão mais portáteis de uma linguagem de programação para outra ou darão suporte a várias linguagens, se as diretrizes a seguir forem cumpridas:

  • No SQL Server 2019 (15.x) e no Banco de Dados SQL do Azure, use uma das opções a seguir:

    • Os tipos de dados char, varchar e varchar(max) com uma ordenação compatível com UTF-8, e os dados são codificados em UTF-8.
    • Os tipos de dados nchar, nvarchar e nvarchar(max) com agrupamento habilitado para caracteres suplementares (SC), e os dados são codificados em UTF-16. O uso de uma ordenação não SC resulta na codificação de dados usando o UCS-2.

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

  • Até o SQL Server 2017 (14.x), substitua todos os usos dos tipos de dados char, varchar e varchar(max) comnchar, nvarchar e nvarchar(max). Se estiver usando um agrupamento com suporte a caractere suplementar (SC), os dados serão codificados em UTF-16. O uso de uma ordenação não SC resulta na codificação de dados usando o UCS-2. Isso evita problemas de conversão de página de código. Para obter mais informações, consulte Suporte de agrupamento e unicode.

    Importante

    O tipo de dados texto foi preterido e não deve ser usado em novos trabalhos de desenvolvimento. Planeje converter dados de texto em varchar(max).

  • Ao realizar comparações e operações de mês e dia da semana, use as partes de data numérica em vez de cadeias de caracteres de nomes. Configurações de linguagem diferentes retornam nomes diferentes para os meses e dias de semana. Por exemplo, DATENAME(MONTH,GETDATE()) retorna May quando o idioma está definido como inglês dos EUA, retorna Mai quando o idioma é definido como alemão e retorna mai quando o idioma é definido como francês. No lugar, use uma função como DATEPART que usa o número do mês ao invés do nome. Use os nomes DATEPART quando for construir conjuntos de resultados a serem exibidos a um usuário, pois os nomes de datas geralmente são mais significativos que uma representação numérica. Porém, não codifique nenhuma lógica que dependa de os nomes exibidos estarem em um idioma específico.

  • Ao especificar datas em comparações ou como entrada para instruções INSERT ou UPDATE, use constantes que sejam interpretadas da mesma forma em todas as configurações de idioma:

    • Os aplicativos ADO, OLE DB e ODBC devem usar as cláusulas de escape ODBC de timestamp, data e hora a seguir:

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

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

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

    • Os aplicativos que usam outras APIs, scripts Transact-SQL, procedimentos armazenados e gatilhos devem usar as sequências numéricas sem separadores. Por exemplo, yyyymmdd como 19980924.

    • Os aplicativos que usam outras APIs ou que usam scripts Transact-SQL, procedimentos armazenados e gatilhos 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 e os tipos de dados da cadeia de caracteres. Por exemplo, a instrução a seguir é interpretada da mesma maneira para todas as configurações de conexão de idioma ou formato de data:

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

Confira também

CAST e CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Suporte a ordenação e Unicode