mysql 超出字段长度自动截取的问题

2015-12-17 17:00:04 +08:00
 ben548

在开发中我遇到两个现象:
1. content 字段在 mysql 的数据类型定义为 varchar(2000),但是表单提交过来的数据是 3674.数据库在 insert 的时候并没有报错,而是自动截取了。
2. mysql 的数据类型定义为 varchar(4000),应用没有重启还是会自动截取。

那么问题来了,这个是 php 处理的呢还是 mysql 处理的?

7090 次点击
所在节点    MySQL
8 条回复
ben548
2015-12-17 17:08:55 +08:00
额,自问自答一下吧,
ben548
2015-12-17 17:10:58 +08:00
自问自答一下,经过测试证实是 mysql 做的处理,另外修改字段长度之后不需要重启就能立即生效。。。我好傻
better0332
2015-12-17 17:22:03 +08:00
你查查 varchar 最大长度是多少
ben548
2015-12-17 17:34:16 +08:00
@better0332 65535 个字节,字符类型若为 gbk ,每个字符最多占 2 个字节,最大长度不能超过 32766;
字符类型若为 utf8 ,每个字符最多占 3 个字节,最大长度不能超过 21845 。这个跟问题的关联在哪里啊?
moro
2015-12-17 17:36:56 +08:00
修改字段类型为 text
ben548
2015-12-17 17:49:00 +08:00
结贴啦,问题已经解决了
Zzzzzzzzz
2015-12-17 17:52:29 +08:00
@ben548 你这是 mysql<=4.0 时代没编码时期按字节算时代的东西, 现在设置编码正确的话 n 就是 n 个字, 不管是中文还是英文, 除非你编码设置错, 不过原则上不建议 varchar 超过 255.
elgoog1970
2015-12-17 22:04:19 +08:00
为啥不用 text 呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/244256

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX