› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
m
V2EX  ›  MySQL

[MySQL]mysqldump出来数据再导入回去,为什么会出现Duplicate entry?

  •  
  •   m · Feb 13, 2013 · 7272 views
    This topic created in 4972 days ago, the information mentioned may be changed or developed.
    库里的一个表,使用varchar(32)+int(16)作为主键,表结构:

    CREATE TABLE `name_lv` (
    `name` varchar(32) NOT NULL,
    `lv` varchar(16) NOT NULL,
    PRIMARY KEY (`name`,`lv`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk

    导出数据后再倒入,同样环境,同样数据库版本,出现几十个Duplicate entry异常,不得已只得增加强制倒入参数
    数据量2000万的表里,几十个错误,并不是很多:

    ERROR 1062 (23000) at line 3532: Duplicate entry '123?-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3584: Duplicate entry 'admin?-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3593: Duplicate entry 'basten?-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3607: Duplicate entry 'condor?-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3846: Duplicate entry '武士の太太?-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3849: Duplicate entry '小小?-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3695: Duplicate entry 'm?o蕶薍﹎-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3799: Duplicate entry '″★→癫茜?-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3801: Duplicate entry '闇嶅?缈-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3802: Duplicate entry '闆勫帤璐?pq-10' for key 'PRIMARY'
    ERROR 1062 (23000) at line 3803: Duplicate entry '冰酷?-10' for key 'PRIMARY'

    怀疑name字段里的这个?号是一个GBK编码不包含的字符所以会产生这个问题?
    那为什么可以录入呢?(录入时正常,导出,再倒入即出Duplicate entry)

    这是个什么问题?如何避免这个情况,怎么解决呢?

    谢谢 :)
    6 replies  •  1970-01-01 08:00:00 +08:00
    clowwindy
        1
    clowwindy  
       Feb 13, 2013   ❤️ 1
    有些 GBK 编码器有个问题,有些超出 GBK 编码范围的字符可以 encode 成 GBK(不会报错),但无法再 decode 出来。对数据完整性来说这是一件很恐怖的事情。
    lqs
        2
    lqs  
       Feb 13, 2013   ❤️ 1
    先把表的字符集改成gb18030或utf8,这样保证所有Unicode字符都能编码解码
    m
        3
    m  
    OP
       Feb 14, 2013
    @clowwindy 恩。。那应该怎么解决这个问题呢?
    m
        4
    m  
    OP
       Feb 14, 2013
    @lqs 选择GBK编码因为name_lv表使用了大量中文name,使用GBK编码比UTF-8节约了一些空间,假设不改编码这个问题有啥办法吗?
    Hualin
        5
    Hualin  
       Feb 14, 2013   ❤️ 1
    谷歌出很久很久以前的帖子:[MySQL] bug - multiple column primary key cannot correctly determine duplicate entry

    http://grokbase.com/t/mysql/mysql/014et5ba8c/bug-multiple-column-primary-key-cannot-correctly-determine-duplicate-entry

    你确定varchar(32) 能对 gbk 正确导出吗?也许超出范围了,系统替换了,然后 数字10 重复了
    lqs
        6
    lqs  
       Feb 16, 2013
    @m gb18030能兼容gbk,而且对unicode中的其他字符也能编码
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2576 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 01:10 · PVG 09:10 · LAX 18:10 · JFK 21:10
    ♥ Do have faith in what you're doing.