為什麼 MySQL 忽略列的資料類型長度?
P粉798343415
P粉798343415 2024-03-28 11:13:09
0
1
326

我正在使用 MySQL 8.0,並且嘗試將 URL 儲存在列中。每次我嘗試插入長度超過 191 個字元的 URL 時,都會收到以下錯誤:

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

列資料型別為 VARCHAR(1000),URL 約為 450 個字元。我嘗試過插入其他字串和任何 191 個字元的內容,並且低於 191 個字元的內容都可以正常工作,但沒有任何內容可以超過 191 個字元。

我嘗試將此列的資料類型變更為其他字串格式,例如 TEXT、LONGTEXT 和 BLOB。我還嘗試在其他表中插入超過 191 個字元的字串,它們也限制為 191 個字元。

我知道 utf8mb4 導致 VARCHAR(255) 實際上是 191,但我不應該用 VARCHAR(1000) 覆蓋它嗎?資料庫中是否存在可能導致此問題的設定?

P粉798343415
P粉798343415

全部回覆(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,同樣的整理。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!