最近项目中遇到的问题,改bug的过程不断加深印象。
首先是int的长度问题:
Mysql数据库中,int的最大长度是11,这是前提,于是前端jsp中提交数据长度限制为11。
问题出现了,提交的时候数据库无法进行修改,什么鬼?
2017-05-15 14:59:27,745|com.cattsoft.isdp.sem.persistence.XxJbxxMapper.updateSelective|DEBUG|1564052|http-nio-8080-exec-9|==> Preparing: UPDATE ISDP_XXJBXX SET XXMC = ?, XZQHDM = ?, ZCDZ = ?, ZZJGDM = ?, XXLB = ?, BXXZ = ?, FDDBR = ?, FDDBRLXFX = ?, JZYGS = ?, NSS = ?, BZ = ? WHERE SID = ?
2017-05-15 14:59:27,746|com.cattsoft.isdp.sem.persistence.XxJbxxMapper.updateSelective|DEBUG|1564053|http-nio-8080-exec-9|==> Parameters: 永平县职业高级中学(String), 532928000000(String), 永平县博南镇文昌路(String), 2410(String), S(String), P(String), 法人(String), 0872-6521561(String), 100(Integer), 222111223(Integer), (String), 3824(String)
以上是sql,看了一下,在前台填写的十一位字段(学生总数、女生数不见了)。
再次上网查询,发现:Mysql中int最长可以表示11位,但是第一位表示“+”或者“-”,之后十位记为数字,这样问题就很明显了,int类型可以填写的数字长度就是十位。
然后是时间字段date datetime timestamp:
date(4字节) 只有日期,表示范围:1000-01-01 至 9999-12-31
datetime(8字节) 日期加时间,表示范围:1000-01-01 00:00:00 至 9999-12-31 23:59:59
timestamp (4字节)时间戳,表示范围 1970-01-01 00:00:01UTC 至 2038-01-19 03:14:07UTC
再说一下char 与 varchar类型:
都是存储字符,实际上没啥可说的。
char固定字符长度:例如,你在数据库中设置char(40),当存入"hello,world!"时,所占的长度为40,不足用空格补充。
varchar限制最大字符长度:例如,你在数据库中设置varchar(40),当存入"hello,world!"时,所占的长度为12。(不计算存储值长度字节,如计算值长度,那么varchar值长度<=255时,用1个字节存储,>255时,用2个字节存储。)
总体来说,当使用varchar时,通常会节约空间,例如某个字段某个值长度特别长,用varchar存储非常合适。时间换空间,当然处理速度方面可能不如char。
就这样。
推荐微信公众号【排骨肉段】,记录日常的美好,记得关注啊。