varchar (255) vs tinytext / tinyblob et varchar (65535) vs blob / text

par définition:

VARCHAR: L'intervalle de longueur est de 1 à 255 caractères. Les valeurs de VARCHAR sont triées et comparées de manière insensible à la casse, à moins que le mot-clé binaire ne soit donné. x+1 octets

TINYBLOB, TINYTEXT: un bloc ou une colonne de texte d'une longueur maximale de 255 (2^8 - 1) caractères x+1 octets

ainsi basé, je crée le tableau suivant:

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Ou est-il préférable de créer un varchar ou tinytext et pourquoi ?

Est-il de même pour:

VARCHAR: la gamme de longueur est > 255 caractères. Les valeurs de VARCHAR sont triées et comparées de manière insensible à la casse, à moins que le mot-clé binaire ne soit donné. x+2 octets

BLOB, texte un BLOB ou une colonne de texte d'une longueur maximale de 65535 (2^16 - 1) caractères x+2 octets

78
demandé sur MikeSchinkel 2011-10-13 18:24:30

2 réponses

de: http://www.pythian.com/news/7129/text-vs-varchar /

à première vue, il semble que le texte et VARCHAR peut stocker le même information. Cependant, il existe des différences fondamentales entre les comment fonctionnent les champs de texte et les champs VARCHAR, qui sont importants à prendre en compte en considération.

Standard VARCHAR is actually part of the ISO SQL: 2003 standard; The Les types de données textuelles, y compris TINYTEXT, ne sont pas standards.

stockage les types de données textuelles sont stockés sous forme d'objets distincts des tables et des ensembles de résultats qui les contiennent. Ce stockage est transparent - il n'y a aucune différence dans la façon dont une requête impliquant un champ de texte est écrit contre un qui implique un champ VARCHAR. Puisque le texte N'est pas stocké dans le cadre d'une rangée, la récupération des champs de texte nécessite un supplément [édité 1/22] surcharge de la mémoire.

maximum VARCHAR length la longueur maximale de ligne d'un VARCHAR est limitée par la longueur maximale de ligne d'une table. C'est de 65 535 octets pour la plupart des moteurs de stockage (NDB a une valeur de ligne maximale différente). Théoriquement, la longueur maximale d'un VARCHAR est de 65 536 octets. Les frais généraux limitent en outre la taille maximale réelle d'une VARCHAR.

stocker la longueur d'un champ VARCHAR prend 1 octet si le VARCHAR le champ a une longueur maximale de 0-255 octets; si elle est supérieure à 255 octets octets, les frais généraux pour stocker la longueur est de 2 octets. Si le type VARCHAR champ permet des valeurs nulles, qui ajoute des frais généraux supplémentaires - chaque table utilise 1 byte de overhead pour chaque ensemble de 8 champs qui permettent NULL valeur. Si le VARCHAR est la seule ligne dans la table, et ne autoriser les valeurs nulles, la longueur maximale permise pour VARCHAR est 65,532 octet.

gardez à l'esprit que le nombre dans VARCHAR(x) représente le nombre de les personnages, pas le nombre d'octets. Par conséquent, vous pouvez avoir des difficultés essayer de définir une table avec seulement VARCHAR(65532) si le jeu de caractères utilise des caractères multi-octets, comme UTF-8.

si vous tentez de définir une valeur VARCHAR qui est plus longue que permise, vous rencontrerez une erreur telle que 1118 ou 1074:

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs.

ERROR 1074 (42000): Column length too big for column 'col_name' (max=[max number here]); use BLOB or TEXT instead

longueur maximale du texte la taille maximale d'un type de données textuelles dépend du type de données Le type de données textuelles est utilisé. Car ils sont stockés comme objets, la seule ligne au-dessus de la table est un pointeur (8 ou 16 octets). Voici une liste de la longueur maximale du texte, et le au-dessus (dans l'objet de texte):

TINYTEXT – up to 255 bytes, 1 byte overhead

TEXT – up to 64 Kb, 2 bytes overhead

MEDIUMTEXT – up to 16 Mb, 3 bytes overhead

LONGTEXT – up to 4 Gb, 4 bytes overhead

valeurs par DÉFAUT MySQL ne permet pas de TEXTE types de données ont une valeur par défaut différente de NULL. Les champs VARCHAR sont autorisés à être créé avec une valeur par défaut.

Conclusions en raison des implications de stockage, il est préférable d'utiliser VARCHAR au lieu de TINYTEXT.

si vous avez besoin d'avoir une valeur par défaut qui n'est pas NULL, vous devez utiliser VARCHAR (ou CHAR).

si vous avez besoin de stocker des chaînes plus longues qu'environ 64 Ko, utilisez MÉDIUMTEXT ou LONGTEXT. VARCHAR ne peut pas supporter de stocker des valeurs qui grand.

assurez-vous d'être conscient des effets d'un multi-byte character set. VARCHAR (255) stocke 255 caractères, qui peuvent être plus de 255 octets.

141
répondu Book Of Zeus 2017-02-16 00:18:12

dans ce cas varchar est mieux.

noter que varchar peut être de 1 à 65535 caractères.

Les valeurs

dans les colonnes de VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée comme une valeur de 0 à 255 avant MySQL 5.0.3, et de 0 à 65.535 dans les versions 5.0.3 et suivantes. La longueur maximale effective D'un VARCHAR dans MySQL 5.0.3 et plus est sujette à la taille maximale de la ligne (65.535 octets, qui est partagée entre tous les colonnes) et le jeu de caractères utilisé. Voir La Section E. 7.4, "Table Column-Count Ligne et Limites de Taille".

Les Blobs

sont enregistrés dans une section séparée du fichier.

Ils nécessitent un fileread supplémentaire à inclure dans les données.

Pour cette raison, varchar est récupéré beaucoup plus rapidement.

si vous avez une grosse tache que vous accédez rarement, qu'une tache a plus de sens.

Stocker les données blob dans un fichier séparé (une partie du fichier) permet à votre fichier de données de base d'être plus petit et donc être récupéré plus rapidement.

8
répondu Johan 2011-11-10 07:06:55