- 浏览: 246201 次
-
文章分类
最新评论
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 962RAID write back指的是raid控制器能够将写 ... -
druid PreparedStatementCache设置
2014-07-08 14:34 3631druid的连接池配置中有PreparedStatement ... -
innodb 插入缓冲
2014-07-01 16:07 709插入缓冲是InnoDB存储引 ... -
Innodb配置,将数据与日志放在不同磁盘可以加快性能
2012-12-06 19:23 753An advanced my.cnf example ... -
character_set_client character_set_connection character_set_results
2012-11-19 20:21 3257之前一直纠结各种编码的却别:character_set_c ... -
amoeba-mysql的安装使用和读写分离(转)
2012-11-16 16:11 1044http://blog.csdn.net/chen861201 ... -
mysqlcheck myisamchk
2012-11-07 17:45 769mysqlcheck的功能类似myisamchk,但其工作不同 ... -
mysqlbinlog乱码
2012-11-06 19:49 5458使用mysqlbinlog查看二进制文件发现 /*!40019 ... -
auto-rehash
2012-11-05 19:20 4149mysql auto-rehash:读取表信息和列信 ... -
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
2012-09-19 20:21 781MySQL主从复制(Master-Slave)与读写分离(My ... -
mysql显示见表语句
2012-09-03 19:13 1192show create table mysql.slow_l ... -
mysql主从同步延迟问题
2012-08-30 14:18 865见http://www.ixpub.net/thread-13 ... -
二进制日志文件
2012-08-29 19:33 1163mysqld在每个二进制日志 ... -
备份恢复数据库
2012-08-28 20:18 838全备份 mysqldump -utest -ptest -- ... -
mysql用户修改密码
2012-08-28 19:37 774mysqladmin -utest -ptest passwo ... -
set session sql_log_bin=0
2012-08-21 15:22 4051引自http://blog.sina.com.cn/s/blo ... -
字符串转换成date
2012-08-15 20:00 935SELECT STR_TO_DATE('Tue 05 June ... -
selecting top N records per group
2012-08-15 18:56 926http://code.openark.org/blog/my ... -
MySQL DELAY_KEY_WRITE
2012-08-02 20:03 1145MySQL DELAY_KEY_WRITE 引自http:// ... -
Mysql Merge表的优点
2012-07-09 13:52 965在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-...
this is incompatible with sql-mode=only-full-group-by
由于需要修改mysql的sql_mode,在命令行修改每次重启都会失效,因为修改docker下mysql的配置文件。 操作系统:centos7 docker版本:Docker version 17.05.0-ce, build 89658be mysql版本:5.7.18 1.拉取镜像 docker...
这个库能够处理多种SQL方言,包括但不限于MySQL、PostgreSQL、Oracle和SQL Server。其主要功能包括: - 自动缩进:根据语法规则为SQL语句添加适当的缩进,使代码层次清晰。 - 行换行:根据指定的最大宽度将长语句...
值得注意的是,描述中提到在MySQL 5.5.25中,服务器选项“--safe-mode”不被推荐使用。这个选项主要用于限制服务器启动时的某些操作,以提供更安全的环境,比如不允许修改表结构或执行危险的SQL命令。然而,由于其...
6. **SQL增强**:包括窗口函数、新的聚合函数、虚拟列等,扩展了SQL语法,使得数据处理更加灵活。 **安装过程:** 1. 首先,你需要下载并解压`mysql-installer-community-5.6.10.1.zip` 文件,得到`mysql-...
本文主要内容是MySQL升级到5.7版本之后,由于默认的 sql_mode 值带来的坑以及对应的解决方案。 案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 ...
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [WinMySQLAdmin] D:\Program Files\mysql-5.7.19-win32\bin\mysqld.exe ``` - 其中,`basedir`指定了MySQL的根目录路径,而`datadir`则指定了数据文件...
- 同样,这些警告不会影响MySQL的功能,但如果需要调整,可以在`my.ini`的`[mysqld]`部分加入`sql_mode=NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,STRICT_ALL_TABLES`等配置。 通过以上步骤,用户...
本文实例讲述了mysql中的sql_mode模式。分享给大家供大家参考,具体如下: mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!我们可以通过以下方式查看当前数据库使用的sql_mode:...
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" ``` **注意**:`datadir`目录必须存在,如果不存在需要手动创建。 #### 四、添加环境变量 为了能够在任何位置通过命令行启动MySQL...
3.2020-开年标杆班-day03-MySQL-SQL_MODE介绍 4.2020-开年标杆班-day03-MySQL-字符集和校对规则 5.2020-开年标杆班-day03-MySQL-数据类型-1 6.2020-开年标杆班-day03-MySQL-数据类型-2 7.2020-开年标杆班-...
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ``` 5. 初始化 MySQL: - 安装依赖:`yum install libaio* -y` - 初始化数据库:`cd /usr/...
MySQL中的SQL Mode是一种非常重要的配置,它决定了数据库服务器在处理SQL语句时的行为。SQL Mode定义了一组规则,这些规则会影响MySQL如何解释和执行SQL语句,包括数据验证、默认值处理、日期时间格式以及一些兼容性...
MySQL中的SQL Mode是一个非常重要的配置选项,它定义了MySQL服务器如何解释和执行SQL语句,以及在数据验证方面遵循的规则。SQL Mode的设定可以根据不同的应用场景进行调整,以适应多种需求,包括兼容其他数据库系统...
解压版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
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES ``` 确保`my.ini`文件保存在`C:\Windows`目录下。然后,打开命令提示符(最好以管理员权限运行),进入MySQL的`bin`目录,执行`mysqld.exe -install`命令...
创建 `/etc/my.cnf` 配置文件,添加必要的参数,例如 `datadir`, `port`, `sql_mode`, `symbolic-links`, `max_connections`, `innodb_file_per_table` 和 `lower_case_table_names`。 9. **启动 MySQL 服务**: ...
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