Mengapa MySQL mengabaikan panjang jenis data lajur?
P粉798343415
P粉798343415 2024-03-28 11:13:09
0
1
371

Saya menggunakan MySQL 8.0 dan cuba menyimpan URL dalam lajur. Setiap kali saya cuba memasukkan URL yang lebih panjang daripada 191 aksara, saya mendapat ralat berikut:

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

Jenis data lajur ialah VARCHAR(1000) dan URL adalah lebih kurang 450 aksara. Saya telah cuba memasukkan rentetan lain dan apa-apa sahaja di bawah 191 aksara, dan apa-apa di bawah 191 aksara berfungsi dengan baik, tetapi tiada yang melebihi 191 aksara.

Saya cuba menukar jenis data lajur ini kepada format rentetan lain seperti TEXT, LONGTEXT dan BLOB. Saya juga cuba memasukkan rentetan lebih panjang daripada 191 aksara dalam jadual lain dan ia juga terhad kepada 191 aksara.

Saya tahu bahawa utf8mb4 menghasilkan VARCHAR(255) yang sebenarnya 191, tetapi bukankah saya patut mengatasinya dengan VARCHAR(1000)? Adakah terdapat tetapan dalam pangkalan data yang boleh menyebabkan isu ini?

P粉798343415
P粉798343415

membalas semua(1)
P粉002546490

Diambil dari di sini:

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.

Jadi lebih baik anda gunakan format TEXT untuk URL anda.

Kemas kini:

Menurut jawapan ini, masalahnya adalah dengan set watak, apabila perlu utf8时,它是utf8mb4, disusun sama.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan