Eu tentei fazer isso:https://serverfault.com/a/65572/603515
Mas mudei um pouco para direcionar apenas o banco de dados que desejo alterar.
mysql -B -N --host=localhost --user=root --password=secret \
-e "select CONCAT('alter table ',TABLE_SCHEMA,'.',
TABLE_NAME,' charset=utf8mb4_bin;')
from information_schema.TABLES WHERE TABLE_SCHEMA = 'usda_nndsr';
select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',
COLUMN_NAME,' charset=utf8mb4_bin;')
from information_schema.COLUMNS WHERE TABLE_SCHEMA ='usda_nndsr';" |
mysql --host=localhost --user=root --password=secret
mas está me dizendo:
mysql: mysql: [Warning] Using a password on the command line interface can be insecure.[Warning] Using a password on the command line interface can be insecure.
ERROR 1115 (42000) at line 1: Unknown character set: 'utf8mb4_bin'
Eu quero utf8mb4_bin
porque ouvi dizer que MySQL utf8 não é utf8 real usando apenas 3 bytes.
Como posso editar minha consulta ou comando para fazer a alteração. Atualmente é o agrupamento sueco padrão.
Versão MySQL:
$ mysql -V
mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
Responder1
utf8mb4_bin
é um "agrupamento", não um "conjunto de caracteres". O conjunto de caracteres correspondente é simplesmente utf8mb4
.
Versões anteriores a 5.5 não tinham charset utf8mb4.
Não há simplesmente como converter todas as colunas de texto de todas as tabelas em um banco de dados inteiro.
Isso converterá todas as colunas de texto ( VARCHAR
e TEXT
) de uma única tabela:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
Eu não confiaria no complexo mysql que você propõe, mesmo depois de corrigir o conjunto de caracteres. Existem vários problemas sobre os quais não estou claro ao usar o -e
. Em vez disso, eu executaria o SELECT
para gerar uma lista de e ALTERs
, em seguida, copiaria e colaria em mysql
.
Alterar a "tabela" altera apenas o conjunto de caracteres padrão para qualquerfuturocolunas que você pode adicionar.
CONVERT TO
altera as colunas - alterando a codificação nos dados e alterando a definição da coluna. As colunas estão atualmente utf8
? Qual versão do MySQL você está executando?