recherche

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

La longueur du stockage varchar dans MySQL

Désolé, l'anglais n'est pas ma langue maternelle...:(

Je veux comprendre comment la longueur réelle de varchar est stockée dans le fichier mysql .ibd. J'ai donc décidé de faire un test comme celui-ci :

CREATE TABLE record_format_demo (
         c1 VARCHAR(10),
        c2 VARCHAR(10) NOT NULL,
         c3 CHAR(10),
         c4 VARCHAR(10)
     ) CHARSET=ascii ROW_FORMAT=COMPACT;

INSERT INTO record_format_demo(c1, c2, c3, c4) VALUES('aaaa', 'bbb', 'cc', 'd');

SELECT * FROM record_format_demo;
+------+-----+------+------+
| c1   | c2  | c3   | c4   |
+------+-----+------+------+
| aaaa | bbb | cc   | d    |
+------+-----+------+------+

J'ai ouvert le fichier ibd via ultraEdit, et la longueur du varchar en hexadécimal est la suivante :

Mais les valeurs de ces colonnes sont trop courtes et n'ont besoin que d'un octet pour compter, j'ai donc fait un autre test comme celui-ci :

CREATE TABLE record_format_demo2 (
         c1 VARCHAR(10),
        c2 VARCHAR(256) NOT NULL,
         c3 CHAR(10),
         c4 VARCHAR(357)
     ) CHARSET=ascii ROW_FORMAT=COMPACT;
         
         
INSERT INTO record_format_demo2(c1, c2, c3, c4) VALUES('aaaa', REPEAT('a',127), 'cc', REPEAT('a', 356));

Son fichier ibd est le suivant :

Mais la longueur de C4 en hexadécimal est 64 81 ,十进制是 25729 。超过 356。我尝试加上两个十六进制,但是 64 + 81 = E5 十进制是 229,不等于 356.

Cela me rend confus, alors je veux savoir pourquoi l'hexagone pour c4 apparaît comme ça et comment le savoir 356

P粉455093123P粉455093123345 Il y a quelques jours449

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

  • P粉744691205

    P粉7446912052024-04-02 12:47:04

    Peut-être ceci :

    • x81 vaut 01, le bit haut est activé
    • Le bit haut signifie "ce nombre est continu"
    • La suite est x64
    • Assembler les pièces donne x0164 = décimal 356

    Avez-vous trouvé où/comment le drapeau NULL apparaît ?

    répondre
    0
  • Annulerrépondre