为什么 MySQL 忽略列的数据类型长度?
P粉798343415
P粉798343415 2024-03-28 11:13:09
0
1
348

我正在使用 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学习者快速成长!