问题现象
 
1:使用navicat 导出5.6.20版本数据库,然后导入到5.7.19mysql出现错误:
 
 
 
 
 
 
 
解决办法:
上述错误有2类,1366错误和1067错误
 
一:1067错误
 
   建表语句有默认值,
 
 
 
5.7+的mysql数据库sql_mode 为严格模式,NO_ZERO_DATE设置该值则不允许插入的0日期,否则或报时间不能为0的错误,所以报错。
 
 
以下解决办法摘自网络:
1、表中的第一个timestamp如果没有设置默认为NULL,或者没有default,或者update字句,则自动分配default_current_timestamp和on update current_timestamp两个属性;
2、之后其他字段的timestamp字段,如果没有设置默认为NULL,或者是default字句,将自动分配为default(0000-00-00 00:00:00)零时间戳,不满足sql_mode中的NO_ZERO_DATE而报错。
注:sql_mode中有两种,一种是空值,一种是严格模式,mysql5.7以后的默认使用严格模式,NO_ZERO_DATE设置该值则不允许插入的0日期,否则或报时间不能为0的错误。
第一种:  select @@SQL_MODE,然后将查询出来的去掉NO_ZERO_DATE
                SET SQL_MODE = '去掉之后的值'。
                该方法只在当前的回话中的生效。(重新打开个命令窗口,SQL_MODE被还原)
第二种:select @@global.sql_mode ,将查询出的去掉NO_ZERO_DATE
               SET GLOBAL SQL_MODE = '去掉之后的值',
               该方法只在当前服务中生效,当重启mysql服务后,则SQL_MODE 被还原
 
 
一:1366错误比较复杂,属于字符集转码问题,先学习mysql 字符集转换的知识:
 
 
     请看另一篇转载文章
 
 
      
 
 
摘录重点过程
 

MySQL中的字符集转换过程

1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
• 使用每个数据字段的CHARACTER SET设定值;
• 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
• 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
• 若上述值不存在,则使用character_set_server设定值。
3. 将操作结果从内部操作字符集转换为character_set_results。
 
 
 
 
 

常见问题解析

• 向默认字符集为utf8的数据表插入utf8编码的数据前没有设置连接字符集,查询时设置连接字符集为utf8
– 插入时根据MySQL服务器的默认设置,character_set_client、character_set_connection和character_set_results均为latin1;
– 插入操作的数据将经过latin1=>latin1=>utf8的字符集转换过程,这一过程中每个插入的汉字都会从原始的3个字节变成6个字节保存;
– 查询时的结果将经过utf8=>utf8的字符集转换过程,将保存的6个字节原封不动返回,产生乱码……
 
 
 
 
向默认字符集为latin1的数据表插入utf8编码的数据前设置了连接字符集为utf8
– 插入时根据连接字符集设置,character_set_client、character_set_connection和character_set_results均为utf8;
– 插入数据将经过utf8=>utf8=>latin1的字符集转换,若原始数据中含有\u0000~\u00ff范围以外的Unicode字 符,会因为无法在latin1字符集中表示而被转换为“?”(0x3F)符号,以后查询时不管连接字符集设置如何都无法恢复其内容了。
 
 
看完上面摘录内容后,分析下上述操作出现 1366错误的原因:
 
 
目标数据库字符集如下:
 
 
源数据库字符集如下:
 
同样是utf8 字符集为什么会出现导入乱码呢? 分析navicat导入的sql 文本,发现字段级字符集定义为GBK, 字符序(校对规则)为 GBK_BIN
 
 
导入的表结构定义:
 
 
 
是一样的,为什么会出现导入不成功的情况?
发现navicat 导入的 longtext 二进制数据存在丢失
 
 
 
 
 
 
 
 
 
在使用mysqldump 命令导出数据库,然后导入mysql,未出现任何error,查看mysqldump 导出的2进制数据:
 
 
 
 
 
从上面可以看到此次并非字符集问题导致的,而是处理大对象时候。navicat存在转码丢失、故导入失败、
在做数据库导出的时候,存在大对象的表,最好使用mysqldump工具。或者进行 cast 函数转换后导出,不推荐。
 
CAST(tb_blog.CONTENT AS char) 
 

Navicat for mysql 导出导入的问题的更多相关文章

  1. [转]mysql导出导入中文表解决方法

    在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下. 在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下一.先针 ...

  2. mysql导出导入某张表

    一般表数据少的话都用图形界面了,看着比较方便. 如果表中数据比较多,用图形界面极容易卡死,这个时候就要用到命令行了. 用命令行导出导入大量数据还是比较快的,方法如下: 导出库db1中的表table1: ...

  3. Mysql导出导入乱码问题解决

    MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...

  4. mysql导出导入数据

    使用sql语句导出数据: 导出时如果不写绝对路径,会提示The MySQL server is running with the --secure-file-priv option so it can ...

  5. mysql导出导入数据库表

    1.下载数据库 mysqldump db_name  -h 192.168.5.162 -uroot -p > /var/www/db_name.sql(这个可以自定义) 2,下载数据库中的某个 ...

  6. Mysql 导出导入

    MySQL数据库导出 以root登录vps,执行以下命令导出. 1./usr/local/mysql/bin/mysqldump -u root -p123456 zhumaohai > /ho ...

  7. MySQL导出导入命令的用例

    1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导 ...

  8. mysql 导出导入数据 -csv

    MySql数据库导出csv文件命令: mysql> select first_name,last_name,email from account into outfile 'e://output ...

  9. mysql导出导入数据库和表学习笔记

    一.mysql导出数据库和表 1.导出单个数据库 mysqldump [-h Host] -u Username -p [PASSWORD] db_name > db_name.sql 2.导出 ...

随机推荐

  1. 角色用户权限RBAC

    关于角色.用户.权限的表设计,已经成为经典中的经典,到处都在用,这里只是收录一下: 角色表:{role_id,role_name} 用户表:{user_id,user_name} 权限表:{permi ...

  2. wap webapp app区别

    “手机WAP版网站”.“手机触屏版网站”.“手机APP应用软件”: wap webapp app区别 电脑版:台式机或者笔记本访问,兼容各个浏览器: Wap版:用于传统智能手机,屏幕小,适合使用手机键 ...

  3. C#中复制数组

    string array = new string[]{"abc", "bcd", "efg"}; string bArray = new ...

  4. Java的接口(interface)属性和方法的类型

    接口的属性必须是public static final Type 接口的方法必须是public abstract Type 不管你是全写,或只写部分,系统都会自动按上面的要求不全 也就是说 接口中 所 ...

  5. Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

  6. Group by、having、order by、Distinct 使用注意事项

    直奔主题,如下SQL语句 SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY REQUEST,METHOD HAVING ...

  7. 打乱数组——shuffle

    在学习vue移动端音乐项目时,看到一个打乱数组函数,感觉很有意思就记录一下(意外发现:slice是个有趣的知识点) 原理:遍历数组,(let i = 0; i < _arr.length; i+ ...

  8. 关于Hall定理的学习

    基本定义 \(Hall\) 定理是二分图匹配的相关定理 用于判断二分图是否存在完美匹配 存在完美匹配的二分图即满足最大匹配数为 \(min(|X|,|Y|)\) 的二分图,也就是至少有一边的点全部被匹 ...

  9. TypeScript 乱糟笔记

    数组头上插一个值. var arr: Array<String> = ['a', 'b', 'c'];arr.unshift('d'); object删除元素. var obj: Obje ...

  10. flash builder注释字体看不清

    window-preferences-flex-editiors-syntex coloring-ActionScript-Comment (窗口-首选项-flashbuilder-编辑器-语法着色- ...