Question

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

Était-ce utile?

La solution

La longueur maximale d'un varchar est soumise à la taille maximale des lignes dans MySQL, qui est de 64 Ko (sans compter les objets BLOB):

VARCHAR(65535)

Notez cependant que la limite est inférieure si vous utilisez un jeu de caractères multi-octets:

VARCHAR(21844) CHARACTER SET utf8

Voici quelques exemples:

La taille de ligne maximale est 65535, mais un varchar inclut également un octet ou deux pour coder la longueur d'une chaîne donnée. Vous ne pouvez donc pas déclarer un varchar de la taille de ligne maximale, même s'il s'agit de la seule colonne du tableau.

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 réduire 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 nous essayons d'utiliser un jeu de caractères multi-octets au niveau de la table, nous constatons qu'il compte chaque caractère comme plusieurs octets. Les chaînes UTF8 n'utilisent pas nécessairement plusieurs octets par chaîne, mais MySQL ne peut pas supposer que vous limiterez toutes vos insertions ultérieures à des caractères à 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

Malgré ce que nous a dit la dernière erreur, InnoDB n’aime toujours pas 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

Cela est parfaitement logique si vous calculez que 21845 * 3 = 65535, ce qui n’aurait pas fonctionné de toute façon. Alors que 21844 * 3 = 65532, cela fonctionne.

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

Autres conseils

Qu'est-ce que VARCHAR (max)?

varchar (max) est une fonctionnalité de Microsoft SQL Server.

La quantité de données qu'une colonne pouvait stocker dans les versions de Microsoft SQL Server antérieures à la version 2005 était limitée à 8 Ko. Pour stocker plus de 8 Ko, vous auriez dû utiliser les types de colonnes TEXT , NTEXT ou BLOB . Ces types de colonnes stockaient leurs données sous la forme suivante: une collection de 8K pages séparées des pages de données de la table; ils étaient en mesure de stocker jusqu'à 2 Go par ligne.

L'avantage de ces types de colonne était qu'ils nécessitaient généralement des fonctions et des instructions spéciales pour accéder aux données et les modifier (par exemple, READTEXT , WRITETEXT et UPDATETEXT )

Dans SQL Server 2005, varchar (max) a été introduit pour unifier les données et les requêtes utilisées pour extraire et modifier les données dans des colonnes de grande taille. Les données des colonnes varchar (max) sont stockées en ligne avec les pages de données de la table.

Au fur et à mesure que les données de la colonne MAX remplissent une page de données de 8 Ko, une page de dépassement de capacité est allouée et la page précédente la désigne comme une liste chaînée. Contrairement aux codes TEXT , NTEXT et BLOB , le type de colonne varchar (max) prend en charge la même sémantique de requête que les autres. types de colonne.

Donc varchar (MAX) signifie vraiment varchar (AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING) et non varchar (MAX_SIZE_OF_A_COLUMN) .

MySql n'a pas un idiome équivalent.

Pour obtenir la même quantité de stockage qu'un varchar (max) dans MySql, vous devez toujours recourir à un type de colonne BLOB . Cet article décrit une méthode très efficace pour stocker efficacement de grandes quantités de données dans MySql.

La longueur maximale d'un varchar est

65535

divisé par la longueur maximale en octets d'un caractère du jeu de caractères dans lequel la colonne est définie (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 8 colonnes nullables. Si votre colonne est null / not null, elle est stockée sous la forme d’un bit dans un octet / octets appelé masque NULL, un bit par colonne pouvant être annulé.

Pour le serveur SQL

modifier la table prg_ar_report_colors add Text_Color_Code VARCHAR (max);

Pour MySQL

modifier la table prg_ar_report_colors add Text_Color_Code longtext;

Pour Oracle

modifier la table prg_ar_report_colors add Text_Color_Code CLOB;

Mysql Conversion de la colonne de VARCHAR en TEXT lorsque la taille limite est inférieure !!!

mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+
| Note  | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

La longueur maximale d'un varchar dans MySQL 5.6.12 est de 4294967295.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top