问题现象
 
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. Visual Studio 跨平台開發實戰(2) - Xamarin.iOS 基本控制項介紹 (转帖)

    前言 在上一篇文章中, 我們介紹了Xamarin 以及簡單的HelloWorld範例, 這次我們針對iOS的專案目錄架構以及基本控制項進行說明. 包含UIButton,, UISlider, UISw ...

  2. Mac 安装Git

    一.安装 在进行安装前,要说一下,Git和SVN一样,都需要创建一个服务器的,他们都可以创建自己的版本管理服务器.对于个人和小团队来说,使用托管服务器可能更合适. 常见的有Github 和 Bitbu ...

  3. JVM启动报错: Could not reserve enough space for object heap error

    首先了解一下参数的含义: 参数 含义 -Xms2G -Xmx2G 代表jvm可用的heap内存最小和最大 -XX:PermSize -XX:MaxPermSize 代表jvm的metadata内存的大 ...

  4. WPF的Label默认的padding不为0

    1.如图: 要求让“Tools” 左对齐,代码中已设置:HorizontalContentAlignment="Left" <Label Foreground="W ...

  5. Java Inner Class 内部类

    内部类  Inner Class 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态内部类static inner class ( ...

  6. 09 jdk1.5的并发容器:CopyOnWriteArrayList(转载)

    原文链接:http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略. 其基本思路是,从一开始大家都在共享同一个内容 ...

  7. php常用的时间函数

    测试环境:php5.3.29 unix时间戳(从Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数.).以下简称时间戳. 设置默认时区 date_default_ ...

  8. RichTextBox控件

    RichTextBox控件允许用户输入和编辑文本的同时提供了比普通的TextBox控件更高级的格式特征 //color在c#中是个枚举enum 蓝色按钮:在蓝色按钮注册click事件后,richtex ...

  9. JavaScript中自定义函数以及文本框、radio、下拉框的值的获取,结合淘宝竞拍案例来理解。。。

    淘宝竞拍案例: HTML部分代码: <form action="#" method="post"> <h2>欢迎进入淘宝竞拍</h ...

  10. SQL 之获取DATE类的年月日语句

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE( ...