Quel est l’équivalent de varchar (max) dans MySQL ?
Réponses
Trop de publicités?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)
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
, NTEXT
ou 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.
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.