首頁  >  問答  >  主體

為什麼 MySQL 忽略列的資料類型長度?

我正在使用 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粉798343415P粉798343415205 天前329

全部回覆(1)我來回復

  • P粉002546490

    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,同樣的整理。

    回覆
    0
  • 取消回覆