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 será alterado 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 em utf8mb4?
\xampp\mysql\bin\my.ini
. Não consegui executarmysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
- pois isso gera o seguinte erro:'grep' is not recognized as an internal or external command, operable program or batch file.
Eu sou novo nessas coisas, então posso estar fazendo algo errado.skip-character-set-client-handshake
no seu arquivo de configuração? É uma opção de linha de comando, não uma variável.character_set_client
,character_set_connection
,character_set_results
,collation_connection
é mostrado comoutf8
. Alguma idéia de por que isso não está funcionando?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 é usado
DEFAULT CHARACTER
como argumento e, se isso não for passado durante a execução, é passado um conjunto de caracteres padrão que não éutfmb4
.Abaixo estão as etapas que segui para corrigi-lo:
Crie um banco de dados fictício com
utf8mb4
conjunto de caracteres.Copie a estrutura e os dados reais para esse 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
Descartar banco de dados atual
Criar novo banco de dados
Por fim, coloque a estrutura da tabela e os dados 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 acima mencionado, leia também cuidadosamente as linhas abaixo mencionadas.
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
fonte