免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3800 | 回复: 22
打印 上一主题 下一主题

mysqldump 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-15 11:08 |只看该作者 |倒序浏览
mysql> select format(sm_createDate,10) from tbl_Player where sm_playerName='lastlog';
+--------------------------+
| format(sm_createDate,10) |
+--------------------------+
| 1,255,406,848.0000000000 |
+--------------------------+
1 row in set (0.00 sec)

mysql> select format(sm_createDate,10) from tbl_Player where sm_playerName='lastlog';
+--------------------------+
| format(sm_createDate,10) |
+--------------------------+
| 1,255,410,048.0000000000 |
+--------------------------+
1 row in set (0.00 sec)

第一个是实际的生产库里查出来的数据,第二个是通过mysqldump备份生产库(也就是第一个),然后导入到另一个数据库中查出来的,现在出现了查出来数据不一致,这个字段的类型是float,是一个角色的创建时间。数据库是innodb,时间和时区都一样。我还尝试过导进生产库,但是查出来还是不一致,请问是什么问题,如何解决!!

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
2 [报告]
发表于 2009-10-15 12:06 |只看该作者
float精度有限,所以导出的数值会有误差。
举个不恰当的例子(实际情况可能不是这样)
就像100000存到数据库a就变99999
从a导出来是99999,然后再存入数据库b,就变99998
所以从a读取是99999,从b读取是99998,所以数据不一致。

关键的问题是,你为什么要用float来存日期类型的数据?

论坛徽章:
0
3 [报告]
发表于 2009-10-15 12:17 |只看该作者

回复 #2 cenalulu 的帖子

不是我要用,是他们开发那边设计的啊!!这个问题我如何解决呢?

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
4 [报告]
发表于 2009-10-15 12:53 |只看该作者
如果对createtime的准确度要求不高的话,dump出来以后,把列的定义改为timestamp,然后再插入吧。
原数据库中的数据已经有精度截断的问题,应该难以挽回了吧~

论坛徽章:
0
5 [报告]
发表于 2009-10-15 13:08 |只看该作者

回复 #4 cenalulu 的帖子

厄。。。。。这个必须得改字段类型了是吧!

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
6 [报告]
发表于 2009-10-15 13:11 |只看该作者
原帖由 poorgreatly 于 2009-10-15 13:08 发表
厄。。。。。这个必须得改字段类型了是吧!


我的想法是:float类型已经导致原来的数据的损坏,无法弥补,需要想的就是如何防止以后的数据再次损坏。

论坛徽章:
0
7 [报告]
发表于 2009-10-15 13:18 |只看该作者

回复 #6 cenalulu 的帖子

现在备份出来都相差很大的。。。字段能改嘛?

论坛徽章:
0
8 [报告]
发表于 2009-10-15 13:21 |只看该作者

回复 #6 cenalulu 的帖子

还有好多时间字段是float的!

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
9 [报告]
发表于 2009-10-15 13:29 |只看该作者
unix_time 到 数据库a的float字段, 产生一次误差
dump出float字段 到 存入数据库b的float字段,又一次误差。

现在由于第一个误差已经无法挽回,所以我建议
select format(sm_createDate,10) from tbl_Player into outfile 'xxx.txt' ; 做数据导出
然后,在数据库b建立新表,并且sm_createDate用int类型
然后再load data infile 'xxx.txt'
这样至少可以避免第二次误差的产生

论坛徽章:
0
10 [报告]
发表于 2009-10-15 13:32 |只看该作者

回复 #9 cenalulu 的帖子

float精度是多少啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP