MySQL
Jeux de caractères et classements
Recherche…
Déclaration
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
Connexion
Pour utiliser les jeux de caractères, il est essentiel de dire au serveur MySQL quel est le codage des octets du client. Voici un moyen:
SET NAMES utf8mb4;
Chaque langage (PHP, Python, Java, ...) a sa propre façon de le faire généralement préférable à SET NAMES
.
Par exemple: SET NAMES utf8mb4
, avec une colonne déclarée CHARACTER SET latin1
- cela convertira de latin1 en utf8mb4 quand INSERTing
et reconvertira en SELECTing
.
Quel jeu de caractères et quelle collection?
Il existe des dizaines de jeux de caractères avec des centaines de classements. (Un classement donné appartient à un seul jeu de caractères.) Voir la sortie de SHOW COLLATION;
.
Il n'y a généralement que 4 CHARACTER SETs
importants:
ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8. This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.
Tous incluent des caractères anglais, codés de manière identique. utf8 est un sous-ensemble de utf8mb4.
Meilleur entrainement...
- Utilisez utf8mb4 pour toute colonne
TEXT
ouVARCHAR
pouvant contenir plusieurs langues. - Utilisez ascii (latin1 est ok) pour les chaînes hexadécimales (UUID, MD5, etc.) et les codes simples (country_code, postal_code, etc.).
utf8mb4 n'existait pas avant la version 5.5.3, donc utf8 était le meilleur disponible avant cela.
En dehors de MySQL , "UTF8" signifie les mêmes choses que MySQL, mais pas MySQL.
Les classements commencent par le nom du jeu de caractères et se terminent généralement par _ci
pour "case and accent _bin
" ou _bin
pour "comparez simplement les bits.
Le dernier classement utf8mb4 est utf8mb4_unicode_520_ci
, basé sur Unicode 5.20. Si vous travaillez avec une seule langue, vous pouvez, par exemple, utf8mb4_polish_ci
, qui réorganisera légèrement les lettres en fonction des conventions polonaises.
Définition des jeux de caractères sur les tables et les champs
Vous pouvez définir un jeu de caractères à la fois par table, ainsi que par champ individuel à l'aide des instructions CHARACTER SET
et CHARSET
:
CREATE TABLE Address (
`AddressID` INTEGER NOT NULL PRIMARY KEY,
`Street` VARCHAR(80) CHARACTER SET ASCII,
`City` VARCHAR(80),
`Country` VARCHAR(80) DEFAULT "United States",
`Active` BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;
City
et Country
utiliseront UTF8
, car nous le définissons comme jeu de caractères par défaut pour la table. Street
, par contre, utilisera ASCII
, comme nous lui avons expressément demandé de le faire.
Définir le bon jeu de caractères dépend fortement de votre jeu de données, mais peut également améliorer considérablement la portabilité entre les systèmes travaillant avec vos données.