Pourquoi MySQL ignore-t-il la longueur du type de données d'une colonne ?
P粉798343415
P粉798343415 2024-03-28 11:13:09
0
1
404

J'utilise MySQL 8.0 et j'essaie de stocker une URL dans une colonne. Chaque fois que j'essaie d'insérer une URL de plus de 191 caractères, j'obtiens l'erreur suivante :

1406 Data too long for column 'url' at row 1

Le type de données de la colonne est VARCHAR(1000) et l'URL comporte environ 450 caractères. J'ai essayé d'insérer d'autres chaînes et tout ce qui contient moins de 191 caractères, et tout ce qui contient moins de 191 caractères fonctionne bien, mais rien de plus de 191 caractères.

J'ai essayé de changer le type de données de cette colonne en d'autres formats de chaîne tels que TEXT, LONGTEXT et BLOB. J'ai également essayé d'insérer des chaînes de plus de 191 caractères dans d'autres tables et elles étaient également limitées à 191 caractères.

Je sais que utf8mb4 donne VARCHAR(255) qui est en fait 191, mais ne devrais-je pas le remplacer par VARCHAR(1000) ? Existe-t-il un paramètre dans la base de données qui pourrait provoquer ce problème ?

P粉798343415
P粉798343415

répondre à tous(1)
P粉002546490

Tiré de ici :

On a database that uses a utf8mb collation, each character takes 4 bytes.
On innodb, indexes (the prefixes to be exact) can contain up to 767 bytes.

So, the max indexable length on utf8mb + innodb is 767/4=191 characters.

Vous feriez donc mieux d'utiliser le format TEXT pour votre URL.

Mise à jour :

Selon cette réponse, le problème vient du jeu de caractères, alors qu'il doit être utf8时,它是utf8mb4, même collationné.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal