sql_mode 之 ignore_space
用于忽略mysql系统函数名与之后的括号之间的空格、
还是给个形像的说明吧如:count (*) 通过设置ignore_space 这个sql_mode 就可以把空格给忽略变成count(*)
1、先从一个普通的例子开始讲起
create table t(id int not null primary key auto_increment, x int);
Query OK, 0 rows affected (0.02 sec) mysql> insert into t(x) values(1),(2),(3),(4),(5),(6);
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0 mysql> select count(*) from t; -- 查看t表中有多少行数据
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.00 sec)
上面这个例子还是比较“中规中矩”、但是生活中又总是有一些人“放荡不羁有自由”;比如他们要建一张表、表名就叫count!
2、建立一张名叫count的表(1)
create table count(x int);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'count(x int)' at line 1
看到这个语法错误你可能会想到count是关键字、是不是要明确的标记出来呢? 于是
3、建立一张名叫count的表(2)
create table `count`(x int);
Query OK, 0 rows affected (0.02 sec)
惊不惊喜? 我想答案一定的否定的、因为我们今天主讲的是ignore_space这个sql_mode 然而它到这里了还没有登场! 就已经有了一种快完了的感觉。
4、建立一张名叫count的表(3)
create table count (x int);
Query OK, 0 rows affected (0.02 sec)
5、而2,3,4我们知道表有两种建法、一是加反引号的 二是加空格的;但是对于函数count的调用也可以有两种写法吗?
select count (*) from t;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) from t' at line 1
由这里可以看到函数与括号之间默认是不能有空格的、如果有的话会报错;有没有一种方式可以让mysql兼容函数的两种写法呢?
有它就是我们今天的主角igonre_space 这个SQL_MODE
6、通过sql_mode来兼容两种count函数的写法
select @@sql_mode;
+---------------------------------------------------------+
| @@sql_mode |
+---------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION |
+---------------------------------------------------------+
1 row in set (0.00 sec) mysql> set @@session.sql_mode=concat(@@sql_mode,',IGNORE_SPACE');
Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> select @@sql_mode;
+----------------------------------------------------------------------+
| @@sql_mode |
+----------------------------------------------------------------------+
| IGNORE_SPACE,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------------+
1 row in set (0.00 sec) mysql> select count (*) from t;
+-----------+
| count (*) |
+-----------+
| 6 |
+-----------+
1 row in set (0.00 sec) mysql> select count(*) from t;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.00 sec)
sql_mode加上ignore_space 有什么不足的地方?
1、由于它直接忽略了空格、所以就造成了有的语法就不起作用了、如:create table count (x int);
2、出现这种需求时多半是不好的编程习惯引起的、如刚才的例子当中、居然给表起了一个叫“count”的名字。
----
sql_mode 之 ignore_space的更多相关文章
- mysql的sql_mode合理设置
mysql的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模式,所以 ...
- mysql SQL_MODE设置
1.1. SQL_MODE设置 在生产环境中强烈建议将这个值设置为严格模式,这样有些问题可以在数据库的设计和开发阶段就能实现,而如果在生产环境下运行数据库后发现这类问题,那么修改的代价将变得十分巨 ...
- MySQL::SQL_MODE
SQL_MODE可能是比较容易让开发人员和DBA忽略的一个变量,默认为空.SQL_MODE的设置其实是比较冒险的一种设置,因为在这种设置下可以允许一些非法操作,比如可以将NULL插入NOT NULL的 ...
- sql_mode :(STRICT_TRANS_TABLES与STRICT_ALL_TABLES 区别)
http://blog.csdn.net/wulantian/article/details/8905573 http://dev.mysql.com/doc/refman/5.7/en/sql-mo ...
- MySQL数据类型:SQL_MODE设置不容忽视
[IT168 技术]SQL_MODE可能是比较容易让开发人员和DBA忽略的一个变量,默认为空.SQL_MODE的设置其实是比较冒险的一种设置,因为在这种设置下可以允许一些非法操作,比如可以将NULL插 ...
- 为什么在有的服务器上禅道、蝉知安装会报错? 之理解MySQL的SQL_MODE
最近用蝉知的CMS 建站比较多,感觉蛮顺手的,但在给客户安装的时候却会出现安装报错,其原因也很简单 查看了一下他们的install.sql文件中,有些时间字段的默认值是0000-00-00 00:00 ...
- Mysql的sql_mode
(一) 基本介绍 set sql_mode="",即强制不设定MySql模式(如不作输入检测.错误提示.语法模式检查等)应该能提高性能,但有如下问题: 如果插入了不合适数据(错误类 ...
- [Mysql]由Data truncated for column联想到的sql_mode配置
系统日志中出现了 ata truncated for column 'agent' at row 1 mysql出现这个问题的原因,无非就是字符集设置 或者是 字段过长导致的. mysql在初始化的时 ...
- 设置 sql_mode
MySQL 的 sql_mode 合理设置 sql_mode 是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模 ...
随机推荐
- linux下tar命令的常用实例
语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项:c 创建新的档案文件.如果用户想备份一个目录或是一些 ...
- kylin 使用RESTful API 请求
目前根据Kylin的官方文档介绍,Kylin的认证是basic authentication,加密算法是Base64,在POST的header进行用户认证我使用的用户和密码是(格式:username: ...
- 腾讯地图打开地图选取位置 withMap
https://lbs.qq.com/tool/component-picker.html withMap import React, { Component } from "react&q ...
- 五子棋棋盘布局 table和ul哪个好
想要在页面布局以上棋盘,可以用ul li 布局,但却有明显的缺点: 1.两行两列:ul li 下面如果再放li 会出错,只能是放其他的,比如div. 或者放li *行*列: 但是这样有两个明显缺陷: ...
- vue 拍照上传图片 demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- INFO Dispatcher:42 - Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
INFO Dispatcher:42 - Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax ...
- ArcPy中mapping常见函数及用法1
arcpy的mapping模块常见属性方法总结1.如何获取当前地图文档: 方式:mxd = mapping.MapDocument("CURRTENT")引用本地或者网络文档(ar ...
- Java新帮派——数组
一.什么是数组: 数组是一个变量,存储相同数据类型的一组数据 声明一个变量就是在内存空间划出一块合适的空间 声明一个数组就是在内存空间划出一串连续的空间 二.数组基本要素: 标识符:数组的名称,用于区 ...
- POJ 3279 - Fliptile - [状压+暴力枚举]
题目链接:http://poj.org/problem?id=3279 Sample Input 4 4 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 Sample Output 0 ...
- Django中一个项目使用多个数据库
在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 参考:http://blog.csdn.net/songfree ...