# 1273 - Agrupamento desconhecido: 'utf8mb4_unicode_ci' cPanel

183

Eu tenho um banco de dados WordPress na minha máquina local que desejo transferir para um phpMyAdmin hospedado no cPanel. No entanto, quando tento importar o banco de dados para o ambiente, continuo recebendo este erro:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

Eu tentei pesquisar no Google e a única solução que posso encontrar é este erro phpmysql - # 1273 - # 1273 - agrupamento desconhecido: 'utf8mb4_general_ci', que até agora não é de grande ajuda. Tentei limpar os cookies, mas ainda não funcionará. Por favor ajude!

Wairimu Murigi
fonte
Qual versão do WordPress? Veja make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrade
Rick James

Respostas:

107

Eu tive o mesmo problema que todos os nossos servidores executam versões mais antigas do MySQL. Isso pode ser resolvido executando um script PHP. Salve esse código em um arquivo e execute-o digitando o nome, o usuário e a senha do banco de dados, e ele mudará o agrupamento de utf8mb4/utf8mb4_unicode_ciparautf8/utf8_general_ci

<!DOCTYPE html>
<html>
<head>
  <title>DB-Convert</title>
  <style>
    body { font-family:"Courier New", Courier, monospace; }
  </style>
</head>
<body>

<h1>Convert your Database to utf8_general_ci!</h1>

<form action="db-convert.php" method="post">
  dbname: <input type="text" name="dbname"><br>
  dbuser: <input type="text" name="dbuser"><br>
  dbpass: <input type="text" name="dbpassword"><br>
  <input type="submit">
</form>

</body>
</html>
<?php
if ($_POST) {
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];

  $con = mysql_connect('localhost',$dbuser,$dbpassword);
  if(!$con) { echo "Cannot connect to the database ";die();}
  mysql_select_db($dbname);
  $result=mysql_query('show tables');
  while($tables = mysql_fetch_array($result)) {
          foreach ($tables as $key => $value) {
           mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
     }}
  echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}

?>
Stephen
fonte
47
Isso parece um exagero vsmysqldump --compatible=mysql4
icc97
2
Para mim funcionou. Lembre-se de nomear o arquivodb-convert.php
Fred K
1
Se você fizer 'localhost' uma entrada, é perfeito.
Br4nnigan 11/02
2
mysqldump --compatible=mysql4ou a resposta abaixo é uma opção melhor. Não acho que seja uma boa idéia mudar algo assim em um site ao vivo. Melhor exportar no formato correto ou, se essa não for uma opção, edite o arquivo exportado.
Tisch
Então você acabou de salvar minha vida, e tudo o que posso lhe dar é um +1.
Taruc
229

A técnica neste post funcionou para mim

1) Clique na guia "Exportar" para o banco de dados

2) Clique no botão de opção "Personalizado"

3) Vá para a seção "Opções específicas de formato" e altere o menu suspenso para "Sistema de banco de dados ou servidor MySQL mais antigo para maximizar a compatibilidade de saída com:" de NENHUM para MYSQL40.

4) Role até o final e clique em "IR".

Não tenho certeza se isso causa alguma perda de dados; no entanto, na única vez em que tentei, não notei nenhuma. Nem alguém que respondeu nos fóruns vinculados acima.

Editar 8/12/16 - Acredito que a exportação de um banco de dados dessa maneira me faz perder dados salvos nos widgets do Visual Studio TinyMCE Visual Editor , embora eu não tenha executado vários testes para confirmar.

Evster
fonte
não funcionou para mim, recebi o erro # 1231 - A variável 'character_set_client' não pode ser definida como o valor de 'NULL'
nerdess 26/06/2015
Após várias tentativas fracassadas de outras soluções, esta funcionou perfeitamente na primeira tentativa.
Vincent Polisi
NÃO funciona com alguns sites novos do Wordpress. Ao importá-lo no outro servidor, ele gera esse erro na primeira tabela que tenta importar (wp_commentmeta) # 1064 - Você tem um erro na sintaxe do SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a sintaxe correta a ser usada perto de 'TYPE = MyISAM AUTO_INCREMENT = 1' na linha 19
que-ben
isso não parece fazer qualquer diferença para mim, ainda obter as mesmas mensagens de erro
pealo86
você é o chefe
Aseel Ashraf
159

Se você já exportou um .sqlarquivo, a melhor coisa a fazer é Localizar e substituir o seguinte, se você o tiver em seu arquivo:

  • utf8mb4_0900_ai_ci para utf8_unicode_ci
  • utf8mb4 para utf8
  • utf8_unicode_520_ci para utf8_unicode_ci

Ele será substituído utf8mb4_unicode_cipor utf8_unicode_ci. Agora você vai para o seu phpMyAdmin cPanel e definir o agrupamento DB para utf8_unicode_ciatravés Operações> Agrupamento .

Se você estiver exportando para a .sql, é melhor alterar o formato de como está exportando o arquivo. Confira a resposta do Evster (está na mesma página que esta)

Rangel R. Morais
fonte
2
que está funcionando perfeitamente, juntamente com este stackoverflow.com/a/30694416/1022726
iurii
Para todos os unix pessoas: sed -i.bak s/utf8mb4/utf8/g FILE_NAME. Ele encontrará todas as ocorrências de utf8mb4FILE_NAME e substitui-o por utf8enquanto salva uma cópia do arquivo original em FILE_NAME.bak. Pode ser necessário ajustá-lo para especificar a coalizão exata no seu caso, mas este é um começo :)
DaveLak
1
Também tive que substituir: utf8_unicode_520_ci por: utf8_unicode_ci
Nick Rivers
Ou via vi: vi dump.sqle, em seguida, através de fazer isso: :%s/uf8mb4/utf8/g.
Valentin Grégoire
2
e substitua utf8_0900_ai_ciporutf8_unicode_ci
Irfan Yusanif 11/07/19
44

eu uso isso no linux:

sed -i 's/utf8mb4/utf8/g' your_file.sql
sed -i 's/utf8_unicode_ci/utf8_general_ci/g' your_file.sql
sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' your_file.sql

então restaure o seu_arquivo.sql

mysql -u yourdBUser -p yourdBPasswd yourdB < your_file.sql
halilintar8
fonte
1
Há um comentário em outra resposta, que vale a pena repetir aqui. A versão do OS X do sed requer um argumento extra após o sinalizador -i. Então sed -i '' ....funciona.
Kent
2
Eu tinha que executar este bem:sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
Michael Hays
28

O Wordpress 4.2 introduziu o suporte à codificação de caracteres "utf8mb4" por razões de segurança , mas apenas o MySQL 5.5.3 e superior o suportam. A maneira como o instalador (e o atualizador) lida com isso é que ele verifica sua versão do MySQL e seu banco de dados será atualizado para utfmb4 somente se for suportado .

Isso parece ótimo em teoria, mas o problema (como você descobriu) é quando você está migrando bancos de dados de um servidor MySQL que suporta utf8mb4 para outro que não. Enquanto o contrário deve funcionar, é basicamente uma operação unidirecional.

Conforme indicado pelo Evster, você pode ter sucesso usando o recurso "Exportar" do PHPMYAdmin. Use " Método de Exportação: Personalizado " e para o " Sistema de banco de dados ou servidor MySQL mais antigo para maximizar a compatibilidade de saída com: " selecione " MYSQL 40 ".

Para uma exportação de linha de comando usando o mysqldump. Dê uma olhada na bandeira:

$ mysqldump --compatible=mysql4

Nota: Se houver caracteres de 4 bytes no banco de dados, eles serão corrompidos.

Por fim, para quem usa o popular plug-in WP Migrate DB PRO, um usuário deste segmento do Wordpress.org relata que a migração é sempre tratada adequadamente, mas não consegui encontrar nada oficial.

O plug-in WP Migrate DB converte o banco de dados de um agrupamento para outro quando move 4.2 sites entre hosts com MySQL pré ou pós-5.5.3

No momento, não parece haver uma maneira de desativar a atualização do banco de dados. Portanto, se você estiver usando um fluxo de trabalho no qual está migrando um site de um servidor ou host local com o MySQL> 5.5.3 para um que use uma versão mais antiga do MySQL, você poderá ficar sem sorte.

Mark Thomson
fonte
Alterar a compatibilidade para "MYSQL 40" funcionou totalmente para mim.
Keryn Gill
3
Se você tentar importar o despejo compatível com mysql4 em um banco de dados pós v5.5.3 (estou usando o 5.5.28), ele falhará porque o script inclui o TYPE=MyISAMque foi removido na v5.1. Faça uma pesquisa e substitua por ENGINE=MyISAM. Não pude ver uma maneira de contornar isso usando as mysqldumpopções de saída.
Icc97 4/08
26

No meu caso, o meu
novo servidor estava em execução MySQL 5.5, o
servidor antigo estava em execução MySQL 5.6.
Então, recebi esse erro ao tentar importar o .sqlarquivo que havia exportado do meu servidor antigo.

O MySQL 5.5 não suporta utf8mb4_unicode_520_ci, mas o
MySQL 5.6 sim.

A atualização para MySQL 5.6o novo servidor resolveu o agrupamento do erro!

Se você deseja manter o MySQL 5.5, você pode:
- fazer uma cópia do seu .sqlarquivo exportado
- substituir instâncias utf8mb4unicode520_cie utf8mb4_unicode_520_ci
... por utf8mb4_unicode_ci
- importar seu .sqlarquivo atualizado .

SherylHohman
fonte
1
Sim - o upload para a versão 5.6 é a solução mais simples para isso (e o Ubuntu possui um mysql-server-5.6pacote que você pode instalar que removerá automaticamente a versão 5.5).
William Turrell
15

Há uma linha no wp-config.php:

define('DB_CHARSET', 'utf8mb4');

Se você seguir de Markouver / de Evster instruções, não se esqueça de alterar esta linha no servidor de produção para

define('DB_CHARSET', 'utf8');

para corrigir caracteres quebrados de 4 bytes

Isk1n
fonte
1
Também não se esqueça de modificar define('DB_COLLATE', 'utf8_general_ci');também. Isso me ajudou.
Abduhafiz 16/07
10

Após uma longa pesquisa, encontrei a solução acima:

  1. Primeiramente, você altera o padrão wp-config.php> Database DB_CHARSET para "utf8"

  2. Clique na guia "Exportar" para o banco de dados

  3. Clique no botão de opção "Personalizado"

  4. Vá para a seção "Opções específicas de formato" e altere o menu suspenso "Sistema de banco de dados ou servidor MySQL mais antigo para maximizar a compatibilidade de saída com:" de NENHUM para MYSQL40.

  5. Role até o final e clique em ir

Então você está.

Dead Boyz
fonte
7

Parece que o seu host não fornece uma versão MySQL capaz de executar tabelas com agrupamento utf8mb4.

As tabelas do WordPress foram alteradas para utf8mb4 com a versão 4.2 (lançada em 23 de abril de 2015) para oferecer suporte a Emojis, mas você precisa do MySQL 5.5.3 para usá-lo. 5.5.3 é a partir de março de 2010, portanto normalmente deve estar amplamente disponível. Você pode verificar se o seu hoster oferece essa versão?

Caso contrário, e uma atualização não é possível, talvez você precise procurar outro hoster para executar as versões mais recentes do WordPress (e sempre faça isso por razões de segurança).

flomei
fonte
1
Pode verificar a sua versão do MySQL via linha de comando com "-V mysql"
Edd Smith
2

Então eu resolvi dessa maneira, do MySQL 5.6 ao MySQL 5.5:

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

(Opcional) Crie um .sql.gzarquivo:

$ gzip database_name.sql 

Explicação

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql

Como explicado nesta resposta , este é apenas o equivalente a estas opções do phpMyAdmin: "Sistema de banco de dados ou servidor MySQL mais antigo para maximizar a compatibilidade de saída com:" menu suspenso, selecione "MYSQL 40" .

$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

Precisamos disso, para resolver esse problema:

ERRO 1064 (42000) na linha 18: Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MySQL para obter a sintaxe correta perto de 'TYPE = InnoDB' na linha 9

Andrea
fonte
1
Observação: Se você estiver usando a versão do OS X do sed: $ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql. Se você deseja manter uma cópia como database_name.sql.bakantes da substituição do sed:$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
Justin Fortier
você também pode incorporar sed.
Davidbitton
Além disso, se você estiver executando o mysqldump no MySQL 8, precisará usar a --compatible=ansiopção
AbstractVoid
1

Eu também experimentei esse problema. A solução que funcionou para mim foi abrir o banco de dados local com o Sequel Pro e atualizar Encoding and Collation para utf8 / utf8_bin para cada tabela antes de importar.

Damian Walsh
fonte
1

A maneira mais fácil de fazer é exportar seu banco de dados .sql, abri-lo no Notepad ++ e "Pesquisar e substituir" o utf8mb4_unicode_cipara utf8_unicode_cie também substituir utf8mb4por utf8. Também não se esqueça de alterar o agrupamento do banco de dados para utf8_unicode_ci(Operações> Agrupamento).

Brane
fonte
0

abra o arquivo sql no Notepad ++ e ctrl + H. depois coloque " utf8mb4" na pesquisa e " utf8" em substituir. O problema será corrigido então.

John
fonte
Ele diz "agrupamento desconhecido utf8"
Cristian Traìna