为什么 MySQL 忽略列的数据类型长度?
P粉798343415
P粉798343415 2024-03-28 11:13:09
[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粉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,同样的整理。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号