sql_mode 之 ignore_space

用於忽略mysql系統函數名與以後的括號之間的空格、mysql

仍是給個形像的說明吧如:count   (*) 經過設置ignore_space 這個sql_mode 就能夠把空格給忽略變成count(*)sql

 

一、先從一個普通的例子開始講起編程

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!session

 

二、創建一張名叫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是關鍵字、是否是要明確的標記出來呢? 因而spa

 

三、創建一張名叫count的表(2)code

create table `count`(x int);
Query OK, 0 rows affected (0.02 sec)

  驚不驚喜? 我想答案必定的否認的、由於咱們今天主講的是ignore_space這個sql_mode 然而它到這裏了尚未登場! 就已經有了一種快完了的感受。server

 

四、創建一張名叫count的表(3)blog

create table count (x int);
Query OK, 0 rows affected (0.02 sec)

 

五、而2,3,4咱們知道表有兩種建法、一是加反引號的 二是加空格的;可是對於函數count的調用也能夠有兩種寫法嗎?rem

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

 

六、經過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 有什麼不足的地方?

  一、因爲它直接忽略了空格、因此就形成了有的語法就不起做用了、如:create table count (x int);

  二、出現這種需求時多半是很差的編程習慣引發的、如剛纔的例子當中、竟然給表起了一個叫「count」的名字。 

 

 

 

----

相關文章
相關標籤/搜索