问题现象
 
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. hibernate树状映射

    例如公司的组织机构:一个公司可以有多个子公司,一个子公司子有多个部门. 其实就是一张表, 例子程序: Organization类: package com.oracle.hibernate; impo ...

  2. Struts2 Validate

    1.自定义action继承ActionSupport 2.复写validate方法,因为ActionSupport实现了Validate这个借口,而这个借口中定义了validate方法 3.当请求时, ...

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

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

  4. 使用VNC访问Windows桌面

    1. 背景介绍 两台电脑,一个笔记本,一个台式机 笔记本上装的是Windows 10, 通过上网小助手上网 (P.S.  上网小助手...Stupid Policy...) 台式机上装的是Ubuntu ...

  5. bind(0)

    通配地址就是全0的地址,由内核随机选取

  6. mysql在查询结果列表前添加一列递增的序号列(最简)

    SELECT @rownum:=@rownum+1 AS 序号, t_user.* FROM  t_user ,(SELECT @rownum:=0) r  -- 最简写法1 更多写法供参考: ①   ...

  7. C#实现文件下载的几种方式

    上篇博客也说了下C#中通过XML导出Excel,这些文件操作都挺有用的,下面是文件的下载,之前做项目都是把它写的空间日志中,以后有时间了把它们都弄出来 先把有问题的代码贴出来吧 using Syste ...

  8. yii 页面加载完成后弹出模态框

    <?php $js = <<<JS $('#page-modal').modal('show');//页面加载完显示模态框 $('.modal-dialog').css('wi ...

  9. Java学习--jsp基础语法

    <%!   %>和<%  %>的区别: <%! //1.可定义方法 //2.可定义static方法 //3.可定义static属性 //4.不可以使用out对象 %> ...

  10. DynamicJasper入门

    JasperReport 在了解DynamicJasper之前不得不先了解一下jasperReport,jasperReport是基于Java的一个开源的报表工具,它使得你可以在Java环境下像其它的 ...