`

mysql的sql-mode

 
阅读更多
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”
分享到:
评论

相关推荐

    Emacs的sql-mode扩展

    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-...

    MySQL5.7中的sql_mode默认值带来的坑及解决方法

    本文主要内容是MySQL升级到5.7版本之后,由于默认的 sql_mode 值带来的坑以及对应的解决方案。 案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 ...

    Mysql之SQL Mode用法详解

    一、Mysql SQL Mode简介 通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持...

    mysql中的sql_mode模式实例详解

    本文实例讲述了mysql中的sql_mode模式。分享给大家供大家参考,具体如下: mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!我们可以通过以下方式查看当前数据库使用的sql_mode:...

    最新老男孩Mysql标杆班day03.rar

    3.2020-开年标杆班-day03-MySQL-SQL_MODE介绍 4.2020-开年标杆班-day03-MySQL-字符集和校对规则 5.2020-开年标杆班-day03-MySQL-数据类型-1 6.2020-开年标杆班-day03-MySQL-数据类型-2 7.2020-开年标杆班-...

    docker下修改mysql配置文件的方法

    由于需要修改mysql的sql_mode,在命令行修改每次重启都会失效,因为修改docker下mysql的配置文件。 操作系统:centos7 docker版本:Docker version 17.05.0-ce, build 89658be mysql版本:5.7.18 1.拉取镜像 docker...

    mysql-8.0.11-winx64 解压版安装带教程

    解压版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的查看与设置 MySQL可以运行在不同的模式下,而且可以在不同的场景下运行不同的模式,这主要取决于系统变量 sql_mode 的值。本文主要介绍一下这个值的查看与设置,主要在Mac系统下。 对于每个模式的...

    Mysql SQL服务器模式介绍

    mysql SQL服务器模式 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程序可以根据自己的需求来定制服务器的操作模式。 模式定义MySQL应支持哪些SQL语法,以及应执行哪种...

    关于MySQL的sql_mode合理设置详解

    MySQL的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也...

    中易广告联盟系统 V3.31

    系统环境 操作系统:Linux/Unix/NT;推荐使用Linux或Unix操作系统,版本不限 服务环境:Apaceh(IIS)+...MYSQL(my.ini) sql-mode选项 修改为以下值 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    Mysql关于使用存储过程设置sql_mode

    NULL 博文链接:https://yixinhu.iteye.com/blog/1534691

    MySQL关于sql_mode解析与设置讲解

    于是乎去谷歌了一番,总算是明白了其中的原因:是因为MySQL的sql_mode 模式限制着一些所谓的‘不合法’的操作。 解析 这个sql_mode,简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等。。 如何查看...

    mysql sql_mode= 的作用说明

    sql_mode=””,即强制不设定MySql模式(如不作输入检测、错误提示、语法模式检查等)应该能提高性能,但有如下问题: 如果插入了不合适数据(错误类型或超常),mysql会将数据设为“最好的可能数据”而不报错,如:...

    mysql-udf-regexp:实现REGEXP _...()函数MySQL用户定义函数模块

    mysql-udf-regexp 该程序包将正则表达式函数用作MySQL用户定义函数(UDF)。 该软件包实现的功能是: REGEXP_LIKE(text, pattern [, mode]) REGEXP_SUBSTR(text, pattern [,... 这些功能在名称上与Oracle SQL函数

    MySql版本问题sql_mode=only_full_group_by的完美解决方案

    主要介绍了MySql版本问题sql_mode=only_full_group_by的完美解决方案,需要的朋友可以参考下

    mysql 5.7数据库免安装版

    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 ...

Global site tag (gtag.js) - Google Analytics