Console MySQL (Windows-> Linux), conjunto de caracteres errado?
Pergunta
Quando faço uma consulta do console MySQL e ele tem sotaques ou qualquer personagem que precise ser UTF-8 codificado, ele é assaltado
INSERT INTO users (userName) VALUES ("José Alarcón");
SELECT userName FROM users;
José Alarcón
SET NAMES utF8
não muda nada --default-character-set=utf8
Como o parâmetro muda, nada lembre -se do que isso é apenas do console. Se eu usar o phpmyadmin ou fazer qualquer consulta a partir de um programa, não há nenhum problema, mas uma linha inserida do console é assaltada. Estou usando Putty no Windows como cliente
~$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Esclarecimento: o computador local do MI é o Windows XP, estou usando o Putty 0.60 como cliente de terminal. O sistema de destino em que o MySQL está em execução é um Linux Debian que não consigo encontrar nenhuma configuração na codificação de caráter ...
ATUALIZAÇÃO: Putty estúpido, tendo a configuração de codificação dentro de um menu chamado "Tradução" WTF?
Solução
Defina Putty para interpretar os dados recebidos como UTF8 na janela -> Tradução "Definir os dados dos dados recebidos".
Outras dicas
O Windows não pode lidar com o UTF8 nas mensagens de console e sistema (que o PuTTY usa). Ele quer usar sua página de código de localidade. Este é um problema comum e conhecido, e não é solucionável sem reescrever o cmd.exe ou usar uma ferramenta de linha de comando diferente.
A Microsoft nunca realmente se incomodou com as codificações fora de seu próprio mundo, o que resulta em códigos específicos do Windows estranhos.
Talvez você possa alterar a codificação de massa em algum lugar em suas opções para que ela possa pelo menos se comunicar corretamente com a CLI do MySQL?
Seu cliente de terminal deve ser configurado usando o UTF8. Seu ambiente de shell no servidor também deve ser configurado como UTF8. Você pode conferir com o seguinte comando.
locale
Depende da distribuição (suponho que você esteja usando o Linux) como o sistema prefere como você corrige as informações do local, se necessário. Por exemplo, o Debian (e, eu acho, o Ubuntu) pede que você use o seguinte comando para reconfigurar as configurações de localidade.
dpkg-reconfigure locales
Perceber; Não tenho certeza se eles mudaram isso, não testaram há algum tempo. :-)
É claro que você pode definir os locais no shell cada vez que efetuar login ou em seu perfil. Eu recomendo que você use o método da distribuição para fazê-lo (se você precisar fazer isso, afinal :-)).