L’une des réponses à une question que j’ai posée hier m’a suggéré de m’assurer que ma firebase database peut gérer correctement les caractères UTF-8. Comment puis-je le faire avec MySQL?
Mettre à jour:
Réponse courte – Vous devriez presque toujours utiliser les utf8mb4
et utf8mb4_unicode_ci
.
Voir:
Aaron commente cette réponse Comment faire en sorte que MySQL gère UTF-8 correctement
Quelle est la différence entre utf8_general_ci et utf8_unicode_ci
Guide de conversion: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
Réponse originale:
MySQL 4.1 et les versions ultérieures ont un jeu de caractères par défaut UTF-8. Vous pouvez le vérifier dans votre fichier my.cnf
, n’oubliez pas de définir le client et le serveur ( default-character-set
et character-set-server
).
Si vous avez des données existantes à convertir en UTF-8, videz votre firebase database et réimportez-la en UTF-8 en vous assurant:
SET NAMES utf8
avant d’interroger / insérer dans la firebase database DEFAULT CHARSET=utf8
lors de la création de nouvelles tables my.cnf
). N’oubliez pas que toutes les langues que vous utilisez (telles que PHP) doivent également être UTF-8. Certaines versions de PHP utiliseront leur propre bibliothèque cliente MySQL, qui peut ne pas être compatible avec UTF-8. Si vous souhaitez migrer des données existantes, n’oubliez pas de sauvegarder en premier! Beaucoup de données étranges peuvent se produire lorsque les choses ne se passent pas comme prévu!
Quelques ressources:
Pour rendre ce “permanent”, dans my.cnf
:
[client] default-character-set=utf8 [mysqld] character-set-server = utf8
Pour vérifier, allez au client et affichez des variables:
SHOW VARIABLES LIKE 'character_set%';
Vérifiez qu’ils sont tous utf8
, à l’exception de ..._filesystem
, qui devrait être binary
et ..._dir
, qui pointe quelque part dans l’installation MySQL.
MySQL 4.1 et les versions ultérieures ont un jeu de caractères par défaut qu’il appelle utf8
mais qui n’est en réalité qu’un sous-ensemble de UTF-8 (qui ne permet que des caractères de trois octets et moins).
Utilisez utf8mb4
comme jeu de caractères si vous voulez “complet” UTF-8.
La réponse courte: Utilisez utf8mb4
en 4 endroits:
SET NAMES utf8mb4
ou quelque chose d’équivalent lors de l’établissement de la connexion du client à MySQL CHARACTER SET utf8mb4
sur toutes les tables / colonnes – sauf les colonnes qui sont ssortingctement ascii / hex / code_ country / code_zip / etc.
si vous produisez en HTML. (Oui, l’orthographe est différente ici.) Plus d’info
UTF8 jusqu’au bout
Les liens ci-dessus fournissent la “réponse canonique détaillée requirejse pour répondre à toutes les préoccupations”. – Il y a une limite d’espace sur ce forum.
modifier
En plus de CHARACTER SET utf8mb4
contenant “tous” les caractères du monde, COLLATION utf8mb4_unicode_520_ci
est le meilleur classement à utiliser. (Il y a aussi des collations turques, espagnoles, etc. pour ceux qui veulent les nuances dans ces langues.)
Le jeu de caractères est une propriété de la firebase database (par défaut) et de la table. Vous pouvez jeter un coup d’oeil (commandes MySQL):
show create database foo; > CREATE DATABASE `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */ show create table foo.bar; > lots of stuff ending with > ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1
En d’autres termes; il est assez facile de vérifier votre charset de firebase database ou de le modifier:
ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
Pour changer le codage du jeu de caractères en UTF-8 pour la firebase database elle-même, tapez la commande suivante à l’invite mysql>. USE ALTER DATABASE
.. Remplacez DBNAME par le nom de la firebase database:
ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
Ceci est un doublon de cette question Comment convertir un jeu de caractères et un classement de firebase database MySQL en UTF-8?
Ces conseils sur MySQL et UTF-8 peuvent être utiles. Malheureusement, ils ne constituent pas une solution complète, mais des pièges courants.
J’ai suivi la solution de Javier, mais j’ai ajouté des lignes différentes dans my.cnf:
[myslqd] skip-character-set-client-handshake collation_server=utf8_unicode_ci character_set_server=utf8
J’ai trouvé cette idée ici: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html dans le premier / seul commentaire d’utilisateur au bas de la page. Il mentionne que skip-character-set-client-handshake a une certaine importance.
Définissez le database collation
de votre database collation
sur UTF-8
puis appliquez table collation
à la firebase database par défaut.
Votre réponse est que vous pouvez configurer avec MySql Settings. Dans Ma réponse peut être quelque chose qui est sorti de son contexte, mais vous savez aussi que c’est de l’aide pour vous.
comment configurer le Character Set
et le Collation
.
Pour les applications qui stockent des données en utilisant le jeu de caractères et le classement MySQL par défaut (
latin1, latin1_swedish_ci
), aucune configuration spéciale ne devrait être requirejse. Si les applications nécessitent un stockage de données utilisant un jeu de caractères ou un classement différent, vous pouvez configurer les informations du jeu de caractères de plusieurs manières:
utf8
, tandis que les applications utilisant une autre firebase database peuvent nécessiter un sjis. Les exemples présentés ici pour votre question sur la définition du jeu de caractères utf8, définissent ici également le classement pour plus d’ utf8_general_ci
(collation utf8_general_ci
).
Spécifier les parameters de caractère par firebase database
CREATE DATABASE new_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Spécifiez les parameters de caractères au démarrage du serveur
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci
Spécifier les parameters de caractères au moment de la configuration de MySQL
shell> cmake . -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci
Pour afficher les valeurs du jeu de caractères et des variables du système de classement qui s’appliquent à votre connexion, utilisez ces instructions:
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
Cette réponse peut être longue, mais il y a tout moyen, vous pouvez utiliser. J’espère que ma réponse vous sera utile. pour plus d’informations http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
SET NAMES UTF8
C’est fait le tour
Définissez votre connexion de firebase database à UTF8:
if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){ //set to utf8 encoding mysql_set_charset('utf8',$handle); }
CONNEXION DE BASE DE DONNÉES À UTF-8
$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error()); mysql_set_charset('utf8',$connect); mysql_select_db('$database_name','$connect') or die(mysql_error());
A pu trouver une solution. A suivi les instructions suivantes, telles que spécifiées sur http://technoguider.com/2015/05/utf8-set-up-in-mysql/
SET NAMES UTF8; set collation_server = utf8_general_ci; set default-character-set = utf8; set init_connect = 'SET NAMES utf8′; set character_set_server = utf8; set character_set_client = utf8;