Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser utf8mb4 avec php et mysql

utf8 de MySQL l'encodage n'est pas UTF-8 réel. C'est un encodage qui ressemble un peu à UTF-8, mais qui ne prend en charge qu'un sous-ensemble de ce que UTF-8 prend en charge. utf8mb4 est réel UTF-8. Cette différence est un détail d'implémentation interne de MySQL. Les deux ressemblent à UTF-8 du côté PHP. Que vous utilisiez utf8 ou utf8mb4 , PHP obtiendra un UTF-8 valide dans les deux cas.

Ce dont vous devez vous assurer, c'est que l'encodage de connexion entre PHP et MySQL est défini sur utf8mb4 . S'il est défini sur utf8 , MySQL ne prend pas en charge tous les caractères. Vous définissez cet encodage de connexion en utilisant mysql_set_charset() , le charset du PDO Paramètre de connexion DSN ou toute autre méthode appropriée pour l'API de base de données de votre choix.

mb_internal_encoding définit simplement la valeur par défaut pour le $encoding paramètre tous mb_* les fonctions ont. Cela n'a rien à voir avec MySQL.

UTF-8 et UTF-32 diffèrent dans la façon dont ils encodent les caractères. UTF-8 utilise un minimum de 1 octet pour un caractère et un maximum de 4. UTF-32 toujours utilise 4 octets pour chaque caractère. UTF-16 utilise un minimum de 2 octets et un maximum de 4.
En raison de sa longueur variable, UTF-8 a un peu de surcharge. Un caractère qui peut être encodé sur 2 octets en UTF-16 peut en prendre 3 ou 4 en UTF-8; d'autre part, UTF-16 n'utilise jamais moins plus de 2 octets. Si vous stockez beaucoup de texte asiatique, UTF-16 peut utiliser moins de stockage. Si la majeure partie de votre texte est en anglais/ASCII, UTF-8 utilise moins de stockage. UTF-32 utilise toujours le plus de stockage.