Eu tenho uma consulta inserindo um caractere especial em uma tabela, por exemplo:
INSERT drinks VALUES( 'Café' )
Eu gostaria de fazer a mesma coisa, da maneira mais portátil possível, usando apenas ASCII na minha consulta, por exemplo:
INSERT drinks VALUES( 'Caf' + <something> )
É possível?
Exigir somente ASCII tornará mais difícil atingir esse objetivo de maneira realmente confiável. Se você tiver apenas um banco de dados ou se tiver vários bancos de dados com o mesmo Collation padrão, usar
CHAR(asciiValue)
conforme mencionado na resposta de @Nelson funcionaria. Apenas tenha em mente que o caractere que você obtém usandoCHAR(someValue)
depende do Collation padrão do banco de dados "atual" ou "ativo" no qual a consulta está sendo executada. O Collation determina a página de código, e isso pode ser diferente para cada banco de dados. O seguinte simula o que aconteceria se o mesmo valor ASCII fosse usado em diferentes bancos de dados que tivessem agrupamentos padrão diferentes que utilizassem páginas de código diferentes:ASCII, é inerentemente difícil de tornar portátil. Os arquivos de texto ASCII não têm a capacidade de indicar qual codificação foi usada para criá-los. O problema que você está vendo é que o arquivo está sendo escrito com uma página de codificação/código e depois sendo lido com outra. Se você abrir o arquivo em seu computador, ele ficará exatamente como deveria? Ou já foi alterado? Como
é
existe em muitas páginas de código, suspeito que ainda pareça bom em seu computador, o que significa que está sendo lido com a codificação errada.Uma maneira de evitar isso é garantir que a pessoa que abre o arquivo o abra com a codificação correta. Você pode usar a caixa de diálogo Abrir arquivo no SSMS para selecionar um arquivo, mas não clique no botão Abrir . Em vez disso, clique na seta para baixo no lado direito do botão Abrir e selecione Abrir com... . Em seguida, selecione SQL Query Editor with Encoding e clique em OK . Uma nova caixa de diálogo aparecerá e será uma lista suspensa de codificações. A lista suspensa será padronizada para (Detecção automática), mas isso não funcionará aqui. Basta selecionar a codificação que você está usando ao salvar o arquivo e clicar em OK .
Uma maneira mais fácil e confiável é usar uma codificação Unicode (UTF-8 ou UTF-16) com uma marca de ordem de byte. A Byte Order Mark (BOM) é de 2 a 4 bytes no início de um arquivo que indica a codificação usada para criar o arquivo. A BOM é usada para detectar automaticamente a codificação, o que significa que você não precisa informar à pessoa para quem está enviando o arquivo qual codificação usar. E não requer que você use dados Unicode no script; sua declaração atual
INSERT
com osVARCHAR
dados não deve ser afetada.Você pode fazer isso indo em Arquivo | Salvar como... Então, assim como na caixa de diálogo Abrir , clique na seta para baixo no botão Salvar e selecione Salvar com codificação . Em seguida, selecione Unicode (UTF-8 com assinatura) - Codepage 65001 ou Unicode - Codepage 1200 e clique em OK .
Use a representação ASCII:
Então, para o seu exemplo:
ϧ
ou&#xhhhh;
ouU+9999
.