recherche

Maison  >  Questions et réponses  >  le corps du texte

Pourquoi MySQL ignore-t-il la longueur du type de données d'une colonne ?

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粉798343415P粉798343415277 Il y a quelques jours410

répondre à tous(1)je répondrai

  • P粉002546490

    P粉0025464902024-03-29 09:53:03

    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é.

    répondre
    0
  • Annulerrépondre