加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

一例mysql ERROR 1062错误的原因和解决办法

(2012-10-17 10:06:49)
分类: 技术随笔
两个mysql DB instance,DB的内容完全相同,执行一条SQL语句向一个临时表中插入数据,插入的数据是从另一个表中通过group by的方式查询出来的,SQL语句类似为:

INSERT INTO tbl_temporary (SELECT * FROM tbl_data_source WHERE condition=1 GROUP BY some_field1,some_filed2 ORDER BY pk_id);

tbl_data_source的数据规模较大,百万级别。结果一个运行正常,另一个报1062错误:Duplicate entry 'WLBAG-1006-614374664' for key 'group_key',而且每次执行报错的duplicate entry并不相同,具有一定的随机性。网上查找很多似乎没有直接符合这个情况的原因,于是从两个DB instance的不同点着手。



两个instance的版本接近,猜测不是版本问题。执行sql语句的两个DB用同样的方式导入,于是怀疑是数据库的字符集问题。



检查mysql的字符集配置:

show variables like 'collation_%';

show variables like 'character_set_%';

结果运行正常的utf-8,报错的是latin1,如下图。

http://s8/mw690/6ff63125tcc38518cb927&690ERROR 1062错误的原因和解决办法"  TITLE="一例mysql ERROR 1062错误的原因和解决办法" />


于是修改mysql字符集配置。

1. 打开mysql的配置文件my.cnf

2. 在[client]下面加上一行:default-character-set=utf8

3. 在[mysqld]下面也加上:default-character-set=utf8

4. 保存关闭后重启mysql:service mysql restart



再次查看mysql的字符集,应该变成utf8了。



若mysql版本为5.5.x,OS为ubuntu12.04,可能会出现按上述配置后mysql服务无法启动的情况。此时将步骤3中[mysqld]的改动替换为:


3. 在[mysqld]下面加上:character-set-server=utf8



保存后重启就应该正常了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有