准备在本地搭建测试库环境,把远程测试库结构及数据导出。在本地建库还原过程中一直失败,之前一直这么干的,所以很纳闷。报错信息中提示invalid value for timestamp,时间字段的默认值被设置为“0000-00-00 00:00:00”。通过度娘定位可能是sql_mode问题,通过“select @@sql_mode”命令查询本:
sql_mode(本地库)
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode(远程库)
STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
对比发现本地库sql_mode中有“NO_ZERO_IN_DATE,NO_ZERO_DAT”,时间中含有0不合法
mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。
ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。
sql_mode常用值如下:
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
STRICT_TRANS_TABLES:
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL
NO_AUTO_CREATE_USER:
禁止GRANT创建密码为空的用户
NO_ENGINE_SUBSTITUTION:
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
PIPES_AS_CONCAT:
将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES:
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysql的sql_mode设置如下:
在my.cnf添加如下配置
[mysqld]
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES
参考:
http://blog.csdn.net/wyzxg/article/details/8787878
分享到:
相关推荐
MySQL 是一个关系数据库管理系统,load data 是 MySQL 中的一种数据导入方法,它可以将文本文件中的数据导入到 MySQL 数据库中。但是,在使用 load data 时,可能会遇到一些问题,本文将讨论这些问题和解决方法。 ...
/* SQLyog Ultimate v8.32 MySQL - 5.0.96-community-nt : ...40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DAT
MySQL数据库在进行数据导入或迁移时,可能会遇到`ERROR 1231 (42000)`这类错误,这通常与服务器接受的数据包大小限制有关。错误信息显示某些变量不能被设置为'NULL'的值,比如`time_zone`, `sql_mode`, `foreign_key...
本示例将详细介绍如何使用 Spark 从 HBase 中读取数据,并通过 Spark SQL 将其存储到 MySQL 数据库中。 首先,让我们了解 Spark 与 HBase 的交互。Spark 提供了 `spark-hbase-connector` 库,允许我们方便地连接到 ...
里介绍修改php.ini实现Mysql导入数据库文件最大限制的修改方法,简单说明了wampserver服务器上针对php.ini配置文件上传限制参数、内存限制参数以及post传输参数等修改方法,需要的朋友可以参考一下
本教程将详细介绍如何使用Delphi编程环境将Excel数据导入到SQL数据库,特别是在繁体中文环境下操作的方法。Delphi是一款强大的RAD(快速应用开发)工具,它提供了丰富的组件和API,使得与各种数据库进行交互变得简单...
40101 SET @OLD_SQL_MODE=@@SQL_MODE */` 和 `SET SQL_MODE=''` 是SQL提示符,用于在不同版本的MySQL中保持兼容性,这里清空了当前的SQL模式。 - `/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES */` 和 `SET SQL_NOTES=...
在MySQL数据库管理中,数据去重是一个常见的需求,特别是在数据导入、数据整合或者处理爬虫抓取的数据时。本文将详细介绍如何在MySQL中合并数据表并去除重复项,以提高数据质量。 首先,我们创建两个具有相同结构的...
### 快速进行Access数据库转成MySQL数据库及MySQL导入中文数据乱码问题的解决方案 #### 一、使用Access-to-mysql Pro进行数据库转换 **Access-to-mysql Pro**是一款能够直接将Access文件导入到MySQL中的专业工具。...
### 使用Embulk实现SQL Server至MySQL的数据迁移 #### 一、背景介绍 随着业务发展和技术迭代,企业常常需要在不同的数据库之间进行数据迁移。本文主要介绍如何使用Embulk这一工具来实现从SQL Server到MySQL的数据...
当新启用的MySQL服务器在导入包含中文数据的Excel或CSV文件时,数据变为空白。原因在于新的MySQL服务器默认的字符集不支持中文,通常表现为character_set_database和character_set_server设置为"latin1",而不能正确...
matlab导入excel代码utl_calculate_mode_for_each_row 关键词:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala ...
在进行上述操作时,需要注意的是,虽然通过修改`sql_mode`可以快速解决数据导入问题,但该选项的改动可能会影响到数据库的其他操作和约束,因此建议在进行调整前备份好相关配置文件和数据库,以防万一出现不预期的...
总之,MySQL的`mysql`和`source`命令在导入多个.sql文件时各有适用场景,合理运用上述优化策略能有效提升数据导入效率,尤其对于处理大量数据的情况。在实际操作中,应结合具体情况选择合适的方法,并进行性能测试以...