# 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!


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>";
}

?>

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.


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)


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

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.


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 .


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


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á.


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).


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


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

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).


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.


Ele diz "agrupamento desconhecido utf8"
Cristian Traìna
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.