最近公司的一台服务器上的mysql出现问题,发生trim(date(selltime)) 和date(selltime)查询出不同的结果集。
经过手动建表插入数据测试都显示trim(date(selltime))和date(selltime)是返回相同结果的。这就排除了trim(date(selltime))和date(selltime)这两个函数由于隐性转换产生不同的结果
测试其它的mysql版本是否存在这个问题 (表CITICKETSELL中的字段selltime为datetime数据类型):在5.0.27-standard 版本中是不存在这个问题的(截图显示5.0.27并不存在这样的问题)
在5.0.45-community版本中就存在这个问题(下图显示了trim(date(selltime))和date(selltime)返回不同的结果)
由以上可知trim(date(selltime))和date(selltime)返回不同结果集的bug只会在5.0.45-community版本中存在(测试中使用了5.0.27-standard; 5.0.45-community; 5.0.51a-community 三个版本,只有5.0.45-community版本存在这个问题。5.0.51a-community版本测试的截图并没有放到这个文档中)
以下演示了对于出问题的表删除部份数据后相同的sql语句竟然返回了更多的记录数(说明表CITICKETSELL出现问题)
删除表中的部份记录后,相同的sql语:select count(*) from CITICKETSELL where date(selltime)=’2008-03-19 竟然返回了更多的记录数。
说明了对于CITICKETSELL表发生的trim(date(selltime))和date(selltime)返回不同结果集的问题并不是由于表所在数据库参数设置不对引起的,也不是由于表对应的字符集引起的,这个问题只能是表中的数据自身引起的(因为对于相同的表删除部份数据后执行相同的sql语句竟然会返回更多的记录可知)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7201003/viewspace-374508/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7201003/viewspace-374508/