天空小小岛技术论坛

 找回密码
 注册
搜索
查看: 7356|回复: 0
打印 上一主题 下一主题

设计数据库表结构时,注意 mysql 数据类型长度

[复制链接]
跳转到指定楼层
#
s.Bo 发表于 2011-6-5 12:06:41 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
日前碰到一论坛出现问题 缓存中一个数组很奇怪的少了一截,而后面的数据又是完整的

查了程序 发现程序在所拼接的数据都是完整的并不存在问题

但数据写到库里面,也很顺利并没有报错,但读出来后就少了一截

因为排查问题都是假设默认程序是没有任何问题的前提下进行查找以便最快的定位到问题,校对了文件及数据库没发现异常

查了很久进数据库发现,数据莫名其妙的少了一段,拿同一句sql 直接执行也少了一段

后来查看表结构才发现 该数据所存储的字段类型 是text( 最大长度65535个字元)

而程序要存储的数据远超过该长度,因为论坛程序版本比较老 并不知道是有人改过这长度还是程序之前版本就有此问题,将该字段长度改为 MediumText 后终于正常了

mysql 手册里面有这么一句话
当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并给出警告。


因为程序里面并不输出警告所以很难发现问题的所在,这里写下这么一段作为标记,设计数据库时一定要估计程序中最多可能产生的字段符长度的,以选择最佳的字段类型。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|天空小小岛  |京ICP备2025130156号|

GMT+8, 2025-6-22 14:56 , Processed in 0.095983 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表