Quel est l'équivalent de varchar (max) dans MySQL?
Quel est l'équivalent de varchar (max) dans MySQL?
Réponses:
La longueur maximale d'un varchar est soumise à la taille de ligne maximale dans MySQL, qui est de 64 Ko (sans compter les BLOB):
VARCHAR(65535)
Cependant, notez 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 de 65535, mais un varchar comprend é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 si c'est la seule colonne de 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 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 restreindrez toutes vos futures insertions à 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 la dernière erreur nous a dit, 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, ce qui fonctionne.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
valeur pour la colonne. Impossible de faire cela avec les types TEXT ou BLOB.
TEXT
limite de longueur est de 64 Ko. MEDIUMTEXT
la limite de longueur est de 16M. LONGTEXT
la limite de longueur est de 4G.
varchar(max)
type de colonne de Sql Server .
TLDR; MySql n'a pas de concept équivalent de varchar(max)
, il s'agit d'une fonctionnalité MS SQL Server.
varchar(max)
est une fonctionnalité de Microsoft SQL Server.
La quantité de données qu'une colonne pouvait stocker dans les versions de serveur Microsoft SQL antérieures à la version 2005 était limitée à 8 Ko. Afin de stocker plus de 8 Ko , vous devez utiliser TEXT
, NTEXT
ou BLOB
types de colonnes, ces types de colonnes stockés leurs données comme une collection de pages 8K séparées des pages de données de table; ils ont pris en charge le stockage jusqu'à 2 Go par ligne.
La grande mise en garde à ces types de colonne était qu'ils fonctions spéciales habituellement nécessaires et les déclarations d'accès et de rectification des données (par exemple READTEXT
, WRITETEXT
et UPDATETEXT
)
Dans SQL Server 2005, a varchar(max)
été introduit pour unifier les données et les requêtes utilisées pour récupérer et modifier les données dans de grandes colonnes. Les données des varchar(max)
colonnes sont stockées en ligne avec les pages de données de table.
Lorsque les données de la colonne MAX remplissent une page de données de 8 Ko, une page de débordement est allouée et la page précédente pointe vers elle en formant une liste liée. Contrairement à TEXT
, NTEXT
et BLOB
le varchar(max)
type de colonne prend en charge la même sémantique de requête que les autres types de colonne.
Donc varchar(MAX)
vraiment signifie varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
et non varchar(MAX_SIZE_OF_A_COLUMN)
.
Afin d'obtenir la même quantité de stockage que varchar(max)
dans MySql, vous devez toujours recourir à un BLOB
type de colonne. Cet article décrit une méthode très efficace pour stocker efficacement de grandes quantités de données dans MySql.
varchar(max)
réellement .
La longueur maximale d'un varchar est
65535
divisé par la longueur maximale en octets d'un caractère dans le jeu de caractères sur 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 qui peuvent être nulles. Si votre colonne est nulle / non nulle, celle-ci est stockée sous la forme d'un bit dans un octet / octets appelé masque nul, 1 bit par colonne qui est nullable.
modifier la table prg_ar_report_colors add Text_Color_Code VARCHAR (max);
alter table prg_ar_report_colors add Text_Color_Code longtext;
alter table prg_ar_report_colors add Text_Color_Code CLOB;
Mysql Conversion de la colonne de VARCHAR en TEXT lorsque la taille est inférieure à la limite !!!
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>