Estou tentando converter meu banco de dados para utf8mb4
seguir este guia . Eu arrumei:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake
Mas o valor de character_set_client
e character_set_results
ainda não mudará para utf8mb4.
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
O que estou fazendo errado? Como faço para definir esses valores para utf8mb4?
Divulgação: sou o autor de How to support Unicode full in MySQL databases , o guia que você está seguindo.
Onde você salvou as configurações modificadas? Verifique
mysqld
de onde carrega as opções padrão. Geralmente é/etc/my.cnf
( como mencionado no guia ), mas pode ser diferente no seu sistema. Execute o seguinte comando para descobrir:Você reiniciou
mysqld
executandomysqld restart
depois de fazer as alterações?Eu também segui esse guia, no entanto, o mesmo problema apareceu novamente. O problema real está no comando usado para criar o banco de dados, pois ele recebe
DEFAULT CHARACTER
como argumento e, se isso não for passado durante a execução, um conjunto de caracteres padrão será passado, o que não éutfmb4
.Abaixo estão os passos que eu segui para corrigi-lo:
Crie um banco de dados fictício com
utf8mb4
conjunto de caracteres.Copie a estrutura e os dados reais para este banco de dados fictício do banco de dados real
mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy
Soltar banco de dados atual
Criar novo banco de dados
Por fim, coloque a estrutura e os dados da tabela de volta no banco de dados original
mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name
Se você for usar o procedimento mencionado acima, certifique-se de ler atentamente as linhas abaixo mencionadas também.
Pré-requisitos e meu status quo:
mysql --version
mysql Ver 14.14 Distrib 5.7.22, para Linux (x86_64) usando o wrapper EditLinecat /etc/my.cnf
Estou usando o cliente java, que é
'mysql:mysql-connector-java:5.1.30'
jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true