- 浏览: 242030 次
文章分类
最新评论
mysql的sql_mode
(一) 基本介绍
sql_mode="",即强制不设定MySql模式(如不作输入检测、错误提示、语法模式检查等)应该能提高性能,但有如下问题:
如果插入了不合适数据(错误类型或超常),mysql会将数据设为“最好的可能数据”而不报错,如:
/数字 设为:0/可能最小值/可能最大值
/字符串 设为:空串/能够存储的最大容量字符串
/表达式 设为:返回一个可用值(1/0-null)
所以,解决办法是:所有列都要采用默认值,这对性能也好。
当然,如果你特别喜欢sqlserver的模式,也可以设置为sql_mod="sqlserver"(好像是这么写的),这样mysql就按sqlserver的方式运作了,建议不要如此。
(二) 常见方式
mysql可以运行在不同sql mode模式下面,sql mode模式定义了mysql应该支持的sql语法,数据校验等!
查看默认的sql mode模式:
select @@sql_mode;
我的数据库是:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
在此模式下面,如果插入的数据的长度大于定义的长度,那么就会报错!
set session sql_mode='REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI';
在这种模式下面:插入的数据的长度大于定义的时候,就会截取,并警告,但是可以插入进去
session表示只在本次中有效
global:表示在本次连接中不生效,而对于新的连接就生效
启用NO_BACKSLASH_ESCAPES模式,使反斜线成为普通字符,在导入数据时候,如果数据中有反斜线,启用这个模式是个不错的选择
启用PIPES_AS_CNCAT模式,将||看成是普通字符串
sql mode值 说明
ANSI
'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE和ANSI组合',
这种模式使语法 和行为更 符合标准的sql
STRICT_TRANS_TABLES 使用与事务和非事务表,严格模式
TRADITIONAL 也是严格模式,对于插入不正确的值给出错误而不是警告。用在事务时,只要发生错误就立即回滚
(三) 修改sql_mode 解决问题
今天安装了个mysql5.0,拿了一个很久之前网上下的程序检查一下是否工作正常.
发现以前的程序居然不能正常运行,提示信息如下:
Database error: Invalid SQL: INSERT INTO Survey_UserHistory(userId,jobId,type,action,startTime,endTime) VALUES(’17′,”,’User’,'Login’,”,’2008-11-23 14:33:56′)
MySQL error: 1366 (Incorrect integer value: ” for column ‘jobId’ at row 1)
Session halted.
第一时间的反应是跟mysql5.0新加的sql-mode有关系,因为前一阵子刚刚看过手册.果然,作了如下更改后就不再提示了.
修改 my.ini 文件.
# Set the SQL mode to strict
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
改为:
# Set the SQL mode to strict
sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
(一) 基本介绍
sql_mode="",即强制不设定MySql模式(如不作输入检测、错误提示、语法模式检查等)应该能提高性能,但有如下问题:
如果插入了不合适数据(错误类型或超常),mysql会将数据设为“最好的可能数据”而不报错,如:
/数字 设为:0/可能最小值/可能最大值
/字符串 设为:空串/能够存储的最大容量字符串
/表达式 设为:返回一个可用值(1/0-null)
所以,解决办法是:所有列都要采用默认值,这对性能也好。
当然,如果你特别喜欢sqlserver的模式,也可以设置为sql_mod="sqlserver"(好像是这么写的),这样mysql就按sqlserver的方式运作了,建议不要如此。
(二) 常见方式
mysql可以运行在不同sql mode模式下面,sql mode模式定义了mysql应该支持的sql语法,数据校验等!
查看默认的sql mode模式:
select @@sql_mode;
我的数据库是:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
在此模式下面,如果插入的数据的长度大于定义的长度,那么就会报错!
set session sql_mode='REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI';
在这种模式下面:插入的数据的长度大于定义的时候,就会截取,并警告,但是可以插入进去
session表示只在本次中有效
global:表示在本次连接中不生效,而对于新的连接就生效
启用NO_BACKSLASH_ESCAPES模式,使反斜线成为普通字符,在导入数据时候,如果数据中有反斜线,启用这个模式是个不错的选择
启用PIPES_AS_CNCAT模式,将||看成是普通字符串
sql mode值 说明
ANSI
'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE和ANSI组合',
这种模式使语法 和行为更 符合标准的sql
STRICT_TRANS_TABLES 使用与事务和非事务表,严格模式
TRADITIONAL 也是严格模式,对于插入不正确的值给出错误而不是警告。用在事务时,只要发生错误就立即回滚
(三) 修改sql_mode 解决问题
今天安装了个mysql5.0,拿了一个很久之前网上下的程序检查一下是否工作正常.
发现以前的程序居然不能正常运行,提示信息如下:
Database error: Invalid SQL: INSERT INTO Survey_UserHistory(userId,jobId,type,action,startTime,endTime) VALUES(’17′,”,’User’,'Login’,”,’2008-11-23 14:33:56′)
MySQL error: 1366 (Incorrect integer value: ” for column ‘jobId’ at row 1)
Session halted.
第一时间的反应是跟mysql5.0新加的sql-mode有关系,因为前一阵子刚刚看过手册.果然,作了如下更改后就不再提示了.
修改 my.ini 文件.
# Set the SQL mode to strict
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
改为:
# Set the SQL mode to strict
sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
发表评论
-
RAID write back write through
2014-07-09 13:44 933RAID write back指的是raid控制器能够将写 ... -
druid PreparedStatementCache设置
2014-07-08 14:34 3595druid的连接池配置中有PreparedStatement ... -
innodb 插入缓冲
2014-07-01 16:07 689插入缓冲是InnoDB存储引 ... -
Innodb配置,将数据与日志放在不同磁盘可以加快性能
2012-12-06 19:23 737An advanced my.cnf example ... -
character_set_client character_set_connection character_set_results
2012-11-19 20:21 3232之前一直纠结各种编码的却别:character_set_c ... -
amoeba-mysql的安装使用和读写分离(转)
2012-11-16 16:11 1021http://blog.csdn.net/chen861201 ... -
mysqlcheck myisamchk
2012-11-07 17:45 747mysqlcheck的功能类似myisamchk,但其工作不同 ... -
mysqlbinlog乱码
2012-11-06 19:49 5386使用mysqlbinlog查看二进制文件发现 /*!40019 ... -
auto-rehash
2012-11-05 19:20 4120mysql auto-rehash:读取表信息和列信 ... -
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
2012-09-19 20:21 767MySQL主从复制(Master-Slave)与读写分离(My ... -
mysql显示见表语句
2012-09-03 19:13 1168show create table mysql.slow_l ... -
mysql主从同步延迟问题
2012-08-30 14:18 847见http://www.ixpub.net/thread-13 ... -
二进制日志文件
2012-08-29 19:33 1106mysqld在每个二进制日志 ... -
备份恢复数据库
2012-08-28 20:18 823全备份 mysqldump -utest -ptest -- ... -
mysql用户修改密码
2012-08-28 19:37 759mysqladmin -utest -ptest passwo ... -
set session sql_log_bin=0
2012-08-21 15:22 3964引自http://blog.sina.com.cn/s/blo ... -
字符串转换成date
2012-08-15 20:00 911SELECT STR_TO_DATE('Tue 05 June ... -
selecting top N records per group
2012-08-15 18:56 900http://code.openark.org/blog/my ... -
MySQL DELAY_KEY_WRITE
2012-08-02 20:03 1130MySQL DELAY_KEY_WRITE 引自http:// ... -
Mysql Merge表的优点
2012-07-09 13:52 935在Mysql数据库中,Mysql Me ...
相关推荐
emacs在sql-mode模式下可以进行SQL编辑和测试。 支持Sybase,Oracle,MySQL和PostgreSQL。 放到site-lisp目录下,然后在.emacs中配置 (load-file (expand-file-name "E:/lispbox-0.7/emacs-23.2/site-lisp/sql-...
本文主要内容是MySQL升级到5.7版本之后,由于默认的 sql_mode 值带来的坑以及对应的解决方案。 案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 ...
一、Mysql SQL Mode简介 通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持...
本文实例讲述了mysql中的sql_mode模式。分享给大家供大家参考,具体如下: mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!我们可以通过以下方式查看当前数据库使用的sql_mode:...
3.2020-开年标杆班-day03-MySQL-SQL_MODE介绍 4.2020-开年标杆班-day03-MySQL-字符集和校对规则 5.2020-开年标杆班-day03-MySQL-数据类型-1 6.2020-开年标杆班-day03-MySQL-数据类型-2 7.2020-开年标杆班-...
由于需要修改mysql的sql_mode,在命令行修改每次重启都会失效,因为修改docker下mysql的配置文件。 操作系统:centos7 docker版本:Docker version 17.05.0-ce, build 89658be mysql版本:5.7.18 1.拉取镜像 docker...
解压版mysql安装教程 my.ini配置文件 [mysqld] # 设置mysql的安装目录 basedir=D:/Program Files (x86)/...sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES skip-grant-tables default-storage-engine=INNODB
MySQL中SQL Mode的查看与设置 MySQL可以运行在不同的模式下,而且可以在不同的场景下运行不同的模式,这主要取决于系统变量 sql_mode 的值。本文主要介绍一下这个值的查看与设置,主要在Mac系统下。 对于每个模式的...
mysql SQL服务器模式 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程序可以根据自己的需求来定制服务器的操作模式。 模式定义MySQL应支持哪些SQL语法,以及应执行哪种...
MySQL的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也...
系统环境 操作系统:Linux/Unix/NT;推荐使用Linux或Unix操作系统,版本不限 服务环境:Apaceh(IIS)+...MYSQL(my.ini) sql-mode选项 修改为以下值 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
NULL 博文链接:https://yixinhu.iteye.com/blog/1534691
于是乎去谷歌了一番,总算是明白了其中的原因:是因为MySQL的sql_mode 模式限制着一些所谓的‘不合法’的操作。 解析 这个sql_mode,简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等。。 如何查看...
sql_mode=””,即强制不设定MySql模式(如不作输入检测、错误提示、语法模式检查等)应该能提高性能,但有如下问题: 如果插入了不合适数据(错误类型或超常),mysql会将数据设为“最好的可能数据”而不报错,如:...
mysql-udf-regexp 该程序包将正则表达式函数用作MySQL用户定义函数(UDF)。 该软件包实现的功能是: REGEXP_LIKE(text, pattern [, mode]) REGEXP_SUBSTR(text, pattern [,... 这些功能在名称上与Oracle SQL函数
主要介绍了MySql版本问题sql_mode=only_full_group_by的完美解决方案,需要的朋友可以参考下
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER #开启查询缓存 explicit_defaults_for_timestamp=true skip-grant-tables (3)生成data目录,DOS下mysqld --initialize-insecure --user=mysql (4)Service ...