Alterando o agrupamento de todas as tabelas e colunas no MySQL

Alterando o agrupamento de todas as tabelas e colunas no MySQL

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_binporque 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 ( VARCHARe 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 SELECTpara 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 TOaltera 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?

informação relacionada