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

Par définition:

VARCHAR: la plage de longueur est comprise entre 1 et 255 caractères. Les valeurs VARCHAR sont sortingées et comparées sans tenir compte de la casse, à moins que le mot clé BINARY ne soit indiqué. x + 1 octets
TINYBLOB, TINYTEXT: une colonne BLOB ou TEXT d’une longueur maximale de 255 (2 ^ 8 – 1) caractères x + 1 octets

Donc, sur cette base, 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 un tinytext et pourquoi ?

Est-ce la même chose pour:

VARCHAR: La plage de longueur est> 255 caractères. Les valeurs VARCHAR sont sortingées et comparées sans tenir compte de la casse, à moins que le mot clé BINARY ne soit indiqué. x + 2 octets
BLOB, TEXT Une colonne BLOB ou TEXT d’une longueur maximale de 65535 (2 ^ 16 – 1) caractères x + 2 octets

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

À première vue, il semble que TEXT et VARCHAR peuvent stocker les mêmes informations. Cependant, il existe des différences fondamentales entre la manière dont les champs TEXT et les champs VARCHAR fonctionnent, qu’il est important de prendre en compte.

VARCHAR standard fait en réalité partie de la norme ISO SQL: 2003; Les types de données TEXT, y compris TINYTEXT, sont non standard.

Stockage Les types de données TEXTE sont stockés sous forme d’objects distincts des tables et des ensembles de résultats qui les contiennent. Ce stockage est transparent – il n’y a pas de différence dans la façon dont une requête impliquant un champ TEXT est écrite par rapport à celle impliquant un champ VARCHAR. Étant donné que TEXT n’est pas stocké dans une ligne, la récupération des champs TEXT nécessite une surcharge de mémoire supplémentaire [modifiée 1/22].

Longueur maximale de VARCHAR La longueur maximale de ligne d’un VARCHAR est limitée par la longueur de ligne maximale d’une table. Cela représente 65 535 octets pour la plupart des moteurs de stockage (le NDB a une valeur de ligne maximale différente). En théorie, la longueur maximale d’un VARCHAR est de 65 536 octets. La surcharge limite en outre la taille maximale réelle d’un VARCHAR.

Stocker la longueur d’un champ VARCHAR prend 1 octet si le champ VARCHAR a une longueur maximale de 0 à 255 octets; si elle est supérieure à 255 octets, la surcharge pour stocker la longueur est de 2 octets. Si le champ VARCHAR autorise les valeurs NULL, ce qui ajoute une surcharge supplémentaire – chaque table utilise 1 octet de surcharge pour chaque ensemble de 8 champs qui autorisent des valeurs NULL. Si VARCHAR est la seule ligne de la table et n’autorise pas les valeurs NULL, la longueur maximale autorisée pour VARCHAR est de 65 532 octets.

Gardez à l’esprit que le nombre dans VARCHAR (x) représente le nombre de caractères et non le nombre d’octets. Par conséquent, vous pouvez avoir des difficultés à définir une table avec uniquement VARCHAR (65532) si le jeu de caractères utilise des caractères multi-octets, tels que UTF-8.

Si vous tentez de définir une valeur VARCHAR plus longue que celle autorisée, 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 de TEXT La taille maximale d’un type de données TEXT dépend du type de type de données TEXT utilisé. Comme ils sont stockés en tant qu’objects, la seule surcharge de ligne dans l’object table est un pointeur (8 ou 16 octets). Voici une liste de la longueur maximale du texte et de la surcharge (dans l’object 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 DEFAULT MySQL ne permet pas aux types de données TEXT d’avoir une valeur par défaut autre que NULL. Les champs VARCHAR peuvent être créés avec une valeur DEFAULT.

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

Si vous devez avoir une valeur DEFAULT qui n’est pas NULL, vous devez utiliser VARCHAR (ou CHAR).

Si vous avez besoin de stocker des chaînes de plus de 64 Ko, utilisez MEDIUMTEXT ou LONGTEXT. VARCHAR ne peut pas prendre en charge le stockage de valeurs aussi importantes.

Assurez-vous de connaître les effets d’un jeu de caractères multi-octets. VARCHAR (255) stocke 255 caractères, qui peuvent être plus de 255 octets.

Dans ce cas, varchar est meilleur.

Notez que varchar peut être varchar entre 1 et 65535 caractères.

Les valeurs dans les colonnes VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée entre 0 et 255 avant MySQL 5.0.3 et entre 0 et 65 535 dans la version 5.0.3 et les versions ultérieures. La longueur maximale effective d’un fichier VARCHAR dans MySQL 5.0.3 et versions ultérieures dépend de la taille maximale des lignes (65 535 octets, partagée entre toutes les colonnes) et du jeu de caractères utilisé. Voir Section E.7.4, «Nombre de colonnes de tableau et limites de taille de ligne».

Les blobs sont enregistrés dans une section distincte 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 un gros blob auquel vous accédez rarement, un blob a plus de sens.
Stocker les données blob dans un fichier séparé (partie du fichier) permet de réduire la taille de votre fichier de données et de le récupérer plus rapidement.