Warum ignoriert MySQL die Datentyplänge einer Spalte?
P粉798343415
P粉798343415 2024-03-28 11:13:09
0
1
400

Ich verwende MySQL 8.0 und versuche, eine URL in einer Spalte zu speichern. Jedes Mal, wenn ich versuche, eine URL einzufügen, die länger als 191 Zeichen ist, erhalte ich die folgende Fehlermeldung:

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

Der Datentyp der Spalte ist VARCHAR(1000) und die URL umfasst etwa 450 Zeichen. Ich habe versucht, andere Zeichenfolgen und alles unter 191 Zeichen einzufügen, und alles unter 191 Zeichen funktioniert gut, aber nichts über 191 Zeichen.

Ich habe versucht, den Datentyp dieser Spalte in andere Zeichenfolgenformate wie TEXT, LONGTEXT und BLOB zu ändern. Ich habe auch versucht, Zeichenfolgen mit mehr als 191 Zeichen in andere Tabellen einzufügen, aber auch diese waren auf 191 Zeichen begrenzt.

Ich weiß, dass utf8mb4 zu VARCHAR(255) führt, was eigentlich 191 ist, aber sollte ich es nicht mit VARCHAR(1000) überschreiben? Gibt es eine Einstellung in der Datenbank, die dieses Problem verursachen könnte?

P粉798343415
P粉798343415

Antworte allen(1)
P粉002546490

取自此处

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.

所以你最好使用 TEXT 格式作为你的 URL。

更新:

根据这个答案,问题出在字符集上,当它需要是utf8时,它是utf8mb4,同样的整理。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage