Como converter todo o conjunto de caracteres do banco de dados MySQL para UTF-8 e agrupar para UTF-8?
mysql
character-encoding
reitor
fonte
fonte
utf8_unicode_ci
, nãoutf8_general_ci
.utf8mb4
em vez deutf8
comoutf8
só suporta o plano multilíngüe básico em oposição a toda a gama. Requer o MySQL 5.5.3 ou superior.utf8mb4
também precisará mudar de agrupamento parautf8mb4_unicode_ci
utf8mb4_unicode_520_ci
ou qualquer outra versão disponível.Respostas:
Use os comandos
ALTER DATABASE
eALTER TABLE
.Ou se você ainda está no MySQL 5.5.2 ou mais antigo que não suporta UTF-8 de 4 bytes, use em
utf8
vez deutf8mb4
:fonte
CONVERT TO
técnica supõe que o texto tenha sido armazenado corretamente em algum outro conjunto de caracteres (por exemplo, latin1) e não seja confundido (como bytes UTF-8 amontoados na coluna latin1 sem conversão para latin1).Faça um backup!
Então você precisa definir os conjuntos de caracteres padrão no banco de dados. Isso não converte tabelas existentes, apenas define o padrão para as tabelas recém-criadas.
Em seguida, você precisará converter o conjunto de caracteres em todas as tabelas existentes e suas colunas. Isso pressupõe que seus dados atuais estejam realmente no conjunto de caracteres atual. Se suas colunas estão definidas para um conjunto de caracteres, mas seus dados são realmente armazenados em outra, você precisará verificar o manual do MySQL sobre como lidar com isso.
fonte
utf8_general_ci
não é mais a melhor prática recomendada. Desde o MySQL 5.5.3 você deve usar emutf8mb4
vez deutf8
. Ambos se referem à codificação UTF-8, mas os mais antigosutf8
tinham uma limitação específica ao MySQL, impedindo o uso dos caracteres numerados acima0xFFFD
.No shell da linha de comando
Se você é o shell da linha de comando, pode fazer isso muito rapidamente. Basta preencher "dbname": D
Uma linha para copiar / colar simples
fonte
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DB="dbname"
DB="db_name"; ( echo 'ALTER DATABASE
'"$ DB"' `CHARACTER SET utf8 COLLATE utf8_general_ci; '; mysql --uuser -ppassword -hhost "$ DB" -e "MOSTRAR TABELAS" --batch --skip-column-names | xargs -I {} echo 'SET Foreign_key_checks = 0; ALTER TABLE'{}'
CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ' ) mysql -uuser -ppassword -hhost "$ DB" `Você pode criar o sql para atualizar todas as tabelas com:
Capture a saída e execute-a.
A resposta de Arnold Daniels acima é mais elegante.
fonte
WHERE TABLE_SCHEMA=webdb_playground
você forneceu o erro desconhecido da coluna, masWHERE TABLE_SCHEMA="webdb_playground"
teria sido bem-sucedido. Algo a tentar no caso de alguém encontrar isso.Antes de prosseguir, verifique se: Você concluiu um backup completo do banco de dados!
Etapa 1: Alterações no Nível do Banco de Dados
Identificando o conjunto de agrupamento e caracteres do seu banco de dados
Corrigindo o agrupamento para o banco de dados
Etapa 2: Alterações no nível da tabela
Identificando tabelas de banco de dados com o conjunto de caracteres ou agrupamento incorreto
Ajustando o agrupamento e o conjunto de caracteres das colunas da tabela
Capture a saída sql superior e execute-a. (como a seguir)
consulte: https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL+Database
fonte
Use HeidiSQL . É uma ferramenta db gratuita e muito boa.
No menu Ferramentas, insira o editor de tabelas em massa
Selecione o banco de dados completo ou escolha tabelas para converter,
Executar
Isso converte o banco de dados completo do latin para utf8 em apenas alguns segundos.
Funciona como um encanto :)
O HeidiSQL se conecta por padrão como utf8, portanto, qualquer caractere especial deve agora ser visto como o caractere (æ ø å) e não como codificado ao inspecionar os dados da tabela.
A verdadeira armadilha ao passar do latin para o utf8 é garantir que o pdo se conecte ao utf8 charset. Caso contrário, você obterá dados de lixo inseridos na tabela utf8 e pontos de interrogação em todo o lugar na sua página da web, fazendo você pensar que os dados da tabela não são utf8 ...
fonte
Inspirado pelo comentário do @sd, aqui está um script do bash que faz o trabalho
fonte
Caso os dados não estejam no mesmo conjunto de caracteres, considere este trecho em http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html
Aqui está um exemplo:
Certifique-se de escolher o agrupamento correto, ou você poderá obter conflitos de chave exclusivos. por exemplo, Éleanore e Eleanore podem ser considerados os mesmos em alguns agrupamentos.
A parte, de lado:
Eu tive uma situação em que certos caracteres "quebraram" nos emails, mesmo que eles estivessem armazenados como UTF-8 no banco de dados. Se você estiver enviando e-mails usando dados utf8, convém também converter seus e-mails para enviar em UTF8.
No PHPMailer, atualize esta linha:
public $CharSet = 'utf-8';
fonte
Para bancos de dados que possuem um número alto de tabelas, você pode usar um script php simples para atualizar o conjunto de caracteres do banco de dados e de todas as tabelas usando o seguinte:
fonte
fonte
fonte
A maneira mais segura é modificar as colunas primeiro para um tipo binário e depois modificá-las novamente para o tipo usando o conjunto de caracteres desejado.
Cada tipo de coluna tem seu respectivo tipo binário, da seguinte maneira:
Por exemplo.:
Eu tentei em várias tabelas latin1 e manteve todos os diacríticos.
Você pode extrair esta consulta para todas as colunas fazendo isso:
Depois de fazer isso em todas as suas colunas, faça-o em todas as tabelas:
Para gerar esta consulta para toda a sua tabela, use a seguinte consulta:
E agora que você modificou todas as suas colunas e tabelas, faça o mesmo no banco de dados:
fonte
Se você não conseguir converter suas tabelas ou sua tabela estiver sempre definida com um conjunto de caracteres não utf8, mas você desejar utf8, sua melhor aposta pode ser limpá-la e começar de novo e especificar explicitamente:
fonte
A única solução que funcionou para mim: http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8
Convertendo um banco de dados contendo tabelas
fonte
alterar tabela nome_tabela charset = 'utf8';
Esta é uma consulta simples que eu pude usar no meu caso. Você pode alterar o nome_tabela conforme suas exigências.
fonte
Para alterar o conjunto de caracteres que codifica para UTF-8 para o próprio banco de dados, digite o seguinte comando no prompt mysql>. Substitua DBNAME pelo nome do banco de dados:
fonte
Você também pode usar a ferramenta de banco de dados Navicat, o que facilita mais.
Clique com o botão direito do mouse em seu banco de dados e selecione Propriedades e alteração do banco de dados conforme desejado em Drop Down
fonte
Solução de linha de comando e excluir visualizações
Estou simplesmente preenchendo a resposta de @ Jasny para outras pessoas como
@Brian
eu e que temos visualizações em nosso banco de dados.Se você tiver um erro como este:
É porque você provavelmente tem visualizações e precisa excluí-las. Mas ao tentar excluí-los, o MySQL retorna 2 colunas em vez de 1.
Portanto, temos que adaptar o comando de Jasny
awk
para extrair apenas a 1ª coluna que contém o nome da tabela.Uma linha para copiar / colar simples
fonte
Para alterar a codificação do conjunto de caracteres para UTF-8, siga as etapas simples no PHPMyAdmin
Selecione seu banco de dados
Ir para Operações
fonte