Eu quero definir uma variável de string Unicode para um caractere específico com base em seu ponto de código Unicode.
Desejo usar um ponto de código além de 65535, mas o banco de dados SQL Server 2008 R2 tem um agrupamento de SQL_Latin1_General_CP1_CI_AS
.
De acordo com a documentação do NCHAR da Microsoft , a NCHAR
função recebe um inteiro da seguinte forma:
expressão_inteiro
Quando o agrupamento do banco de dados não contém o sinalizador de caractere suplementar (SC), esse é um número inteiro positivo de 0 a 65535 (0 a 0xFFFF). Se um valor fora desse intervalo for especificado, NULL será retornado. Para obter mais informações sobre caracteres suplementares, consulte Collation and Unicode Support.
Quando o agrupamento do banco de dados oferece suporte ao sinalizador de caractere suplementar (SC), esse é um número inteiro positivo de 0 a 1114111 (0 a 0x10FFFF). Se for especificado um valor fora desse intervalo, será retornado NULL.
Então este código:
SELECT NCHAR(128512);
Retorna NULL
neste banco de dados.
Eu gostaria que ele retornasse o mesmo que isso:
SELECT N'?';
Como posso definir uma variável de string Unicode (por exemplo, nvarchar) para um emoji usando código (sem usar o caractere emoji real) em um banco de dados onde o agrupamento "não contém o sinalizador de caractere suplementar (SC)"?
Lista completa de pontos de código Unicode emoji
(Em última análise, quero que qualquer personagem funcione. Apenas escolhi emoji para facilitar a referência.)
(Embora o servidor seja o SQL Server 2008 R2, também estou curioso sobre as soluções para versões posteriores.)
Supondo que não há como, eu poderia fazer referência a uma função definida pelo usuário em linha em outro banco de dados que tivesse um agrupamento apropriado?
Como faço para encontrar um agrupamento que tenha o sinalizador "caractere suplementar"?
Isso não retorna nenhum registro em nosso servidor:
SELECT * FROM sys.fn_helpcollations()
WHERE name LIKE 'SQL%[_]SC';
Parece que o SQL Server 2012 foi introduzido Latin1_General_100_CI_AS_SC
, o que funcionaria. Você pode instalar agrupamentos em instâncias mais antigas?
Referências de agrupamento:
- Resposta para Qual é a diferença entre char, nchar, varchar e nvarchar no SQL Server?
- Informações de agrupamento de caracteres suplementares da Microsoft
- Lista de agrupamentos do SQL Server 2008 R2 da Microsoft
Existe uma explicação de por que, independentemente do agrupamento, o SQL Server pode entender e lidar com os caracteres estendidos, exceto da perspectiva de NCHAR
?