天空小小岛技术网站

标题: 设计数据库表结构时,注意 mysql 数据类型长度 [打印本页]

作者: s.Bo    时间: 2011-6-5 12:06
标题: 设计数据库表结构时,注意 mysql 数据类型长度
日前碰到一论坛出现问题 缓存中一个数组很奇怪的少了一截,而后面的数据又是完整的

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

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

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

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

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

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

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


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




欢迎光临 天空小小岛技术网站 (http://tkxxd.net/) Powered by Discuz! X3.1