212 votes

Équivalent de varchar (max) dans MySQL ?

Quel est l’équivalent de varchar (max) dans MySQL ?

228voto

Bill Karwin Points 204877

La longueur maximale d'un varchar est soumis au max de la taille de ligne de MySQL, qui est de 64 ko (pas de comptage de Gouttes):

VARCHAR(65535)

Toutefois, notez que la limite est plus faible si vous utilisez un multi-byte character set:

VARCHAR(21844) CHARACTER SET utf8

Voici quelques exemples:

La taille maximale des lignes est de 65535, mais un varchar comprend également un octet ou deux pour encoder la longueur d'une chaîne donnée. Si vous avez réellement ne pouvez pas déclarer un varchar de la taille maximale de ligne, même si c'est la seule colonne dans la table.

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Mais si nous essayons de diminuer les longueurs, nous trouvons la plus grande longueur qui fonctionne:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

Maintenant, si on essaie d'utiliser un jeu de caractères multi-octets au niveau de la table, nous trouvons qu'il compte chaque caractère de plusieurs octets. UTF8 chaînes ne sont pas nécessairement l'utilisation de plusieurs octets par chaîne, mais MySQL ne peut pas supposer que vous allez restreindre tous vos futurs d'insérer des caractères codés sur un octet.

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

En dépit de ce que la dernière erreur nous a dit, InnoDB ne fonctionne toujours pas comme une longueur de 21845.

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

C'est parfaitement logique, si vous calculez que 21845*3 = 65535, qui n'aurait pas marché de toute façon. Alors que 21844*3 = 65532, qui fonctionne.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

84voto

joshperry Points 17727

La quantité de données qu'une colonne de Microsoft SQL server versions antérieures à la version 2005 a été limitée à 8 ko. Afin de stocker plus de 8 KO vous étiez aurais dû utiliser TEXT, NTEXTou BLOB types de colonnes, ces types de colonne stockées leurs données comme une collection de 8K pages séparées à partir de la table des pages de données; ils ont pris en charge le stockage de jusqu'à 2 go par ligne. Le gros inconvénient de ces types de colonne est qu'ils généralement exigé spécial des fonctions et des instructions d'accès et de modification des données (par exemple, READTEXT, WRITETEXT, et UPDATETEXT)

Dans SQL Server 2005 varchar(max) a été introduit afin d'unifier les données et les requêtes pour récupérer et modifier des données dans de grandes colonnes. Les données pour l' varchar(max) colonnes sont stockées en ligne avec les données de la table des pages. Comme les données dans la colonne MAX remplit un 8 ko pour les données de la page une page de dépassement de capacité de l'attribution et de la page précédente points formant une liste liée. Contrairement aux TEXT, NTEXT, et BLOB le varchar(max) type de colonne prend en charge tous la même requête sémantique que d'autres types de colonne.

Donc, varchar(MAX) signifie vraiment, c' varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING) et pas varchar(MAX_SIZE_OF_A_COLUMN), MySql n'a pas d'équivalent de l'idiome.

Pour obtenir la même quantité de stockage en tant que varchar(max) MySql vous auriez encore besoin de recourir à un BLOB type de colonne. Cet article décrit une méthode très efficace de stocker de grandes quantités de données MySql de manière efficace.

32voto

ʞɔıu Points 15907

La longueur maximum du type varchar est

65535

divisé par la longueur max octet d’un caractère dans le jeu de caractères, la colonne a la valeur (par exemple utf8 = 3 octets, ucs2 = 2, latin1 = 1).

moins 2 octets pour stocker la longueur

moins la longueur de toutes les autres colonnes

moins 1 octet pour chaque 8 colonnes nullables. Si votre colonne est null et not null c’est stockée comme un bit dans un octet/octets appelé le masque null, 1 bit par colonne qui accepte les valeurs NULL.

-15voto

ajabep Points 1

La longueur maximum du type varchar dans MySQL 5.6.12 est 4294967295.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X