2017-04-11 3 views
0

Je vais avoir une grande base de données avec des mots, et une colonne de la table aurait un maximum de 3 lettres mais il y aura quelques accents français comme â, ê, î , o, u,char vs varchar pour les accents français (caractères multi-octets)

un exemple serait d'avoir une colonne qui aurait peut-être [id] [column2] 1 a 2 b 3 vf 4 êf 5 t

donc ils ne seront fixe à tout moment, et parfois certaines lignes vont ont des caractères d'accent, qui à ma connaissance nécessitent un octet de plus.

Je pense quelle serait la meilleure option à spécifier pour cette colonne? CHAR pourrait être plus rapide, parce qu'ils auront besoin de 3 octets max à chaque fois mais souvent il sera stocké 1-2 octets

D'autre part VARCHAR est longueur variable, et je ne dois préciser quoi que ce soit Mais J'ai lu que char est meilleur pour la performance, car je vais lire les colonnes mots très souvent.

Selon vous, quel est le meilleur? Et pourquoi?

Répondre

0

Utilisez VARCHAR à moins que vous ne parliez de champs de longueur fixe comme les codes de pays ISO pour avoir une certaine longueur. Rappelez-vous caractères et octets ne sont pas la même chose. Le jeu de caractères pour cette colonne et/ou table et/ou connexion et/ou la chaîne d'origine aura un impact sur ce qui est réellement stocké. Dans certains jeux de caractères, un caractère comme é est un octet, et dans d'autres, comme UTF-8, il est deux. D'autres caractères comme seront trois ou quatre octets et nécessitent utf8mb4.

Si vous demandez CHAR(2), cela autorisera deux caractères quel que soit le jeu de caractères de la colonne.

+0

Merci, vous l'avez très bien expliqué. MES pensées exactement! – Ryan

+0

Si cela résout votre question, marquez-la si vous le souhaitez. Aide à diriger les autres avec le même problème vers les bonnes solutions. – tadman

0

Optimisation prématurée.

Récupérer un enregistrement est beaucoup plus cher que pratiquement tout ce que vous faites au sein la ligne.

Presque toujours simplement VARCHAR(n)n est une longueur appropriée pour les données.

CHAR(n) est utile que pour six pans, country_code, postal_code, UUID, etc - les choses qui sont à la fois longueur fixe et CHARACTER SET ascii.

Bien sûr, vous pouvez vous en tirer avec des caractères CHARACTER SET latin1 d'un octet pour le français et une grande partie de l'Europe. Mais c'est une si petite optimisation que ça ne vaut pas la peine de le faire.

+0

Merci d'expliquer – Ryan