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

mysql 超出字段长度自动截取的问题 - V2EX  https://www.v2ex.com/t/244256

 

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

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

 

ben548  
    1
 
ben548   
OP
   2015-12-17 17:08:55 +08:00
 
额,自问自答一下吧,
ben548  
    2
 
ben548   
OP
   2015-12-17 17:10:58 +08:00
 
自问自答一下,经过测试证实是 mysql 做的处理,另外修改字段长度之后不需要重启就能立即生效。。。我好傻
better0332  
    3
 
better0332   
 
   2015-12-17 17:22:03 +08:00
 
你查查 varchar 最大长度是多少
ben548  
    4
 
ben548   
OP
   2015-12-17 17:34:16 +08:00
 
@better0332 65535 个字节,字符类型若为 gbk ,每个字符最多占 2 个字节,最大长度不能超过 32766;
字符类型若为 utf8 ,每个字符最多占 3 个字节,最大长度不能超过 21845 。这个跟问题的关联在哪里啊?
moro  
    5
 
moro   
 
   2015-12-17 17:36:56 +08:00
 
修改字段类型为 text
ben548  
    6
 
ben548   
OP
   2015-12-17 17:49:00 +08:00
 
结贴啦,问题已经解决了
Zzzzzzzzz  
    7
 
Zzzzzzzzz   
 
   2015-12-17 17:52:29 +08:00
 
@ben548 你这是 mysql<=4.0 时代没编码时期按字节算时代的东西, 现在设置编码正确的话 n 就是 n 个字, 不管是中文还是英文, 除非你编码设置错, 不过原则上不建议 varchar 超过 255.
elgoog1970  
    8
 
elgoog1970   
 
   2015-12-17 22:04:19 +08:00
 
为啥不用 text 呢
posted @   ingemar,fang  阅读(888)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示