首页  >  问答  >  正文

为什么 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 天前334

全部回复(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
  • 取消回复