/ / É o SQL Server 2008 que armazena o uf8 - java, sql-server-2008, unicode, utf-8

O SQL Server 2008 está armazenando o uf8 - java, sql-server-2008, unicode, utf-8

Eu tenho um servlet java que está usando utf8. Eu entrei numerosos caracteres (chinês tradicional, russo, etc) e eles parecem ser armazenados e recuperados do SQL Server 2008 bem. O sql server 2008 manipula strings codificadas utf8? Se não, por que não há problemas ainda?

    psmt.setString(7, myString); //myString is UTF8 encoded
psmt.executeUpdate();

Respostas:

1 para resposta № 1

Não, sua string é na verdade codificada em UTF-16 - é uma string Java e strings Java são sequências de unidades de código UTF-16.

Ele (principalmente) não importa como o SQL Server armazena o valor internamente, desde que ele possa representar o mesmo repertório de caracteres. Seu esquema SQL deve determinar quais valores podem ser armazenados - como eles são armazenados são irrelevantes.

Existem potencialmente muitas codificações importantes aqui:

  • A codificação usada quando você apresenta dados do seu aplicativo, por exemplo via HTML
  • A codificação usada internamente pelo Java (UTF-16, pelo menos como é exposta pela linguagem)
  • A codificação usada para transferir dados para o banco de dados (que está sob o controle do driver do banco de dados; isso pode ou não precisar ser configurado)
  • A codificação usada para armazenar os dados no banco de dados

Todos estes podem ser diferentes - desde quepode armazenar o mesmo conjunto de caracteres. Então, enquanto os bytes usados ​​para representar ☃ (U + 2603, Unicode Snowman) serão diferentes quando forem codificados em utf-8 e UTF-16, contanto que posso ser codificado (e é codificado corretamente), isso é tudo o que importa.

Agora existem alguns casos em que a abstração cai, é claro - se você perguntar pelo comprimento de uma string em Java com o String.length(), que é o comprimento em unidades de código UTF-16, não emCaracteres Unicode. Da mesma forma, se você tem campos SQL que são limitados a um tamanho específico, você deve prestar muita atenção ao que essas unidades são. (Eu não sei de improviso para o SQL Server 2008, mas eu vi bancos de dados onde isso é em termos de unidades de código UTF-16 e outras em que são necessários bytes na codificação utf-8. Assim, nesse tipo de situação, a diferença pode ser importante - mas o geral "Posso armazenar meus dados "pergunta não requer que as codificações sejam as mesmas.