我正在使用 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
,同样的整理。