J'essaie de convertir ma base de données en utf8mb4
suivant ce guide . J'ai mis:
[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
Mais la valeur de character_set_client
et character_set_results
ne changera toujours pas en 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 |
+--------------------------+--------------------+
Qu'est-ce que je fais mal? Comment obtenir ces valeurs définies sur utf8mb4?
\xampp\mysql\bin\my.ini
. Je n'ai pas pu exécutermysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
- car cela donne l'erreur suivante:'grep' is not recognized as an internal or external command, operable program or batch file.
je suis nouveau dans ce genre de choses, donc je peux faire quelque chose de mal.skip-character-set-client-handshake
dans votre fichier de configuration? C'est une option de ligne de commande, pas une variable.character_set_client
,character_set_connection
,character_set_results
,collation_connection
est présentée commeutf8
. Des idées pourquoi cela ne fonctionne pas?J'ai également suivi ce guide, cependant, le même problème est apparu à nouveau. Le véritable problème réside dans la commande utilisée pour créer la base de données telle qu'elle prend
DEFAULT CHARACTER
comme argument et si cela n'est pas transmis pendant l'exécution, un jeu de caractères par défaut est transmis, ce qui n'est pas le casutfmb4
.Voici les étapes que j'ai suivies pour y remédier:
Créez une base de données factice avec un
utf8mb4
jeu de caractères.Copiez la structure et les données réelles dans cette base de données factice à partir de la base de données réelle
mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy
Supprimer la base de données actuelle
Créer une nouvelle base de données
Enfin, remettez la structure de la table et les données dans la base de données d'origine
mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name
Si vous allez utiliser la procédure mentionnée ci-dessus, assurez-vous de lire attentivement les lignes ci-dessous également.
Prérequis et mon statu quo:
mysql --version
mysql Ver 14.14 Distrib 5.7.22, pour Linux (x86_64) utilisant le wrapper EditLinecat /etc/my.cnf
J'utilise un client java qui est
'mysql:mysql-connector-java:5.1.30'
jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true
la source