web-dev-qa-db-fra.com

Utiliser utf8mb4 dans MySQL

Pour utiliser utf8mb4 sur 4 octets dans MySQL (5.6.11), j'ai défini les variables suivantes dans le fichier my.ini (my.cnf est introuvable). Ce fichier se trouve dans un dossier caché nommé Application Data (C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.6) sous Windows XP. Il n'est pas disponible dans le répertoire d'installation.

[client]
port=3306
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4

Et puis en émettant la commande suivante,

SHOW VARIABLES
WHERE Variable_name
LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';

affiche toujours la liste suivante.

enter image description here

La photo elle-même montre clairement que plusieurs variables utilisent encore le utf8 à 3 octets.


Auparavant, la commande suivante avait déjà été émise pour apporter les modifications correspondantes à la base de données.

ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

Et la commande suivante avait également été émise sur chaque table de ladite base de données.

ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

Néanmoins, quelle est la raison pour laquelle certaines variables n'ont pas encore été définies pour le jeu de caractères en question ainsi que pour le classement? Que manque-t-il?

Le système (système d'exploitation) lui-même a été redémarré après l'exécution de chaque tâche spécifiée ci-dessus.

7
Tiny

Le client définit généralement ces valeurs lors de la connexion. Les paramètres de my.ini sont simplement des valeurs par défaut qui s'appliquent lorsque le client ne spécifie pas explicitement un codage de connexion. Comme ils ne sont pas fiables, chaque client devrait spécifier un codage de connexion. Puisque vous avez une capture d’écran sophistiquée, je suppose que vous vous connectez avec un utilitaire graphique qui probablement explicitement fait définit certains encodages de connexion.

Exemple PHP de définition d'un jeu de caractères de connexion:

new PDO('mysql:Host=localhost;charset=utf8mb4')
5
deceze

Si vous affichez vos variables globales, vous constaterez peut-être que tous vos paramètres sont corrects. 

SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

Cela pourrait être lié à ce bug J'ai également rencontré le même problème dans le passé. J'ai changé un jeu de caractères de base de données de utf8 à utf8mb4. Exécuter des requêtes directement depuis la ligne de commande mysql était ok mais j'ai eu du mal à insérer emojis avec Workbench. J'ai fini par le configurer manuellement en exécutant 

SET NAMES 'utf8mb4' 

chaque fois que j'ouvre une connexion à ma base de données avec Workbench.

Utiliser Sequel Pro comme solution de rechange convenait également.

3
Grid Vost

Je pense que vous vous connectez en tant que root, le init-connect='SET NAMES utf8mb4' n'est donc pas exécuté.

Il est déconseillé d'utiliser root (ou SUPER) pour tout code d'application; juste pour des actions administratives.

1
Rick James