MySQL en UTF/Unicode migration des conseils
-
09-06-2019 - |
Question
Quelqu'un aurait-il des conseils ou gotcha moments à regarder dehors pour lorsque vous essayez de migrer les tables MySQL à partir de la valeur par défaut cas-insenstive suédois ou ascii de l'utf-8?Certains des projets que je me suis impliqué dans luttent pour une meilleure internationalisation et de la base de données va être une partie importante de ce changement.
Avant de chercher à modifier la base de données, nous sommes en train de convertir chaque site afin d'utiliser l'UTF-8 de codage de caractères (de moins critique pour la plupart) pour aider à assurer toutes les entrées/sorties est d'utiliser le même jeu de caractères.
Merci pour toute aide
La solution
Quelques conseils:
- Votre
CHAR
etVARCHAR
les colonnes de l'utiliser jusqu'à 3 fois plus d'espace disque.(Vous n'aurez probablement pas beaucoup d'espace disque croissance pour des mots suédois.) - Utilisation
SET NAMES utf8
avant de lire ou d'écrire dans la base de données.Si vous n'avez pas cela, alors vous obtiendrez partiellement des caractères tronqués.
Autres conseils
Je vais aller sur les sites suivants/articles pour aider à trouver une réponse.
Hanselminutes épisode "Tri Internationalisation avec Michael Kaplan"
Et je viens de trouver un très sur le sujet post par Derek Sivers @ O'Reilly ONLamp Blog que j'ai écrit cela. Le tournant de données MySQL en latin1 pour de l'utf-8 utf-8
Méfiez-vous de l'indice des limitations de longueur.Si un tableau est structuré, dire:
un varchar(255) b varchar(255) key ('a', 'b')
Vous allez à aller au-delà de 1000 octets limite sur la longueur des clés.255+255 est correct, mais 255*3 + 255*3 n'est pas d'aller travailler.
Votre
CHAR
etVARCHAR
les colonnes de l'utiliser jusqu'à 3 fois plus d'espace disque.
Seulement si ils sont bourré de latin-1 avec des ordinaux > 128.Sinon, l'augmentation de l'utilisation de l'espace de l'UTF-8 est minime.
Les classements ne sont pas toujours favorables.Vous obtiendrez umlats rassembler non umlatted versions qui n'est pas toujours correcte.Pouvez aller de w/ utf8_bin, mais ensuite, tout est affaire délicate.