nvarchar(100)
contém 100 pares de bytes , conforme documentado aqui . LEFT([Your String], 100)
trunca sua string para 100 caracteres conforme documentado aqui . Estes não são iguais.
Tolamente, usei LEFT([Your String], 100)
na esperança de me manter [Your String]
dentro de mim nvarchar(100)
. Quais são as abordagens idiomáticas para resolver este problema corretamente? Pensei em usar CAST
, mas não me sinto confortável em truncar implicitamente uma string.
Se você tiver certeza de que
[Your String]
está usando um agrupamento não SC, poderá usarLEFT([Your String], 100)
eCAST([Your String] as nvarchar(100))
de forma intercambiável, pois em agrupamentos não SC cada par de bytes representa um caractere (os caracteres substitutos representam a si mesmos).Esteja ou não
[Your String]
usando um agrupamento SC (o que deveria ser, se os caracteres substitutos representassem algo diferente de si mesmos),CAST([Your String] as nvarchar(N))
nunca executará um truncamento no meio de uma sequência de bytes que representa um caractere (onde a interpretação de tal byte sequência como um único caractere é determinada pelo agrupamento atual). Você pode confirmar isso executando o código a seguir e inspecionando sua saída.No caso geral,
CAST
é o caminho a percorrer.