Pergunta

Eu tenho puxar meu ouvir fora sobre este problema por algumas horas ontem:

Eu tenho um banco de dados MySQL server 4.1.22 com codificação conjunto para "UTF-8 Unicode (UTF-8)" (como relatado por phpMyAdmin). Tabelas neste banco de dados tem conjunto charset padrão para latin2 . Mas, a aplicação web (Simple CMS Made escrito em PHP) usando ele exibe páginas em utf8 ...

No entanto asneira este pode ser, ele realmente funciona. O aplicativo web exibe caracteres corretamente (principalmente Checa e Polónia são usados).

Eu corro: "mysqldump -u xxx -p -h yyy dbname> dump.sql". Isso me dá um script SQL que:

  • parece perfeito em qualquer editor (como o Notepad +) ao exibir em UTF-8 - todos os caracteres exibidos corretamente
  • todas as tabelas no script tem conjunto charset padrão para latin2
  • tem "/ * 40101 SET NOMES latin2 * /;!" linha no início (entre outras configurações)

Agora, eu quero exportar este banco de dados para outro servidor em execução no MySQL 5.0.67, também com conjunto de codificação servidor para "UTF-8 Unicode (UTF-8)". Copiei todo o CMS Made Simple instalação acabou, copiado o script dump.sql e correu "mysql -h ddd -u zzz -p nome_do_banco_de_dados

Eu tentei configuração:
character_set_client SET = utf8;
SET character_set_connection = latin2;

E todas as combinações (apenas para ser seguro, mesmo que isso não faz qualquer sentido para mim): latin2 / utf8, latin2 / latin2, utf8 / utf8, etc. - não ajuda. Todos os personagens ainda mexidos, no entanto, por vezes, de uma maneira diferente:.)

Eu também tentei substituir todas as configurações latin2 com utf8 no script (nomes de conjuntos e conjuntos de caracteres padrão para tabelas). Nada.

Existem especialistas MySQL aqui que poderia explicar em poucas palavras (eu tenho certeza que é simples, afinal) como todo este material de codificação realmente funciona? Eu li 9.1.4. Conjuntos de caracteres de conexão e Collations mas não encontrou nada útil lá.

Obrigado, Matt

Foi útil?

Solução 2

Ugh ... ok, parece que encontrei uma solução.

MySQL não é o culpado aqui. Eu fiz um despejo simples e carga agora, sem alterações para o script dump.sql - o que significa que deixei "nomes de conjuntos de latin2" e tabelas charsets como estavam. Então eu mudei minha instalação original CMSMS para o novo banco de dados e ... funcionou corretamente. Então, na verdade codificação no banco de dados é ok, ou pelo menos ele funciona bem com a instalação CMSMS eu tinha no meu provedor de hospedagem de idade (CMSMS aparentemente faz coisas engraçadas com caracteres codificação ).

Para fazê-lo funcionar no meu novo provedor de hospedagem, eu realmente tive que adicionar esta linha ao lib / adodb / drivers / adodb-mysql.inc.php na instalação CMSMS:

mysql_query('set names latin2',$this->_connectionID);

Esta é uma solução ligeiramente modificado a partir do este post . Você pode encontrar a linha exata lá também. Portanto, parece que problema de configuração cliente mysql.

Outras dicas

Você tentou adicionar a opção nome --default-character-set =, como este:

mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql

Eu tive esse problema antes e funcionou depois de usar essa opção.

Espero que ajude!

solução para mim:

definir essa opção em seu arquivo php, depois de mysql_connect (ou depois de mysql_select_db ) ..

mysql_query("SET NAMES 'utf8'");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top