我正在使用 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粉0025464902024-03-29 09:53:03
取自此處:
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
,同樣的整理。