sql_mode 之 ignore_space
用于忽略mysql系統(tǒng)函數(shù)名與之后的括號之間的空格、
還是給個形像的說明吧如:count (*) 通過設(shè)置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表中有多少行數(shù)據(jù) +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.00 sec)
上面這個例子還是比較“中規(guī)中矩”、但是生活中又總是有一些人“放蕩不羈有自由”;比如他們要建一張表、表名就叫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是關(guān)鍵字、是不是要明確的標(biāo)記出來呢? 于是
3、建立一張名叫count的表(2)
create table `count`(x int); Query OK, 0 rows affected (0.02 sec)
驚不驚喜? 我想答案一定的否定的、因為我們今天主講的是ignore_space這個sql_mode 然而它到這里了還沒有登場! 就已經(jīng)有了一種快完了的感覺。
4、建立一張名叫count的表(3)
create table count (x int); Query OK, 0 rows affected (0.02 sec)
5、而2,3,4我們知道表有兩種建法、一是加反引號的 二是加空格的;但是對于函數(shù)count的調(diào)用也可以有兩種寫法嗎?
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
由這里可以看到函數(shù)與括號之間默認(rèn)是不能有空格的、如果有的話會報錯;有沒有一種方式可以讓mysql兼容函數(shù)的兩種寫法呢?
有它就是我們今天的主角igonre_space 這個SQL_MODE
6、通過sql_mode來兼容兩種count函數(shù)的寫法
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、出現(xiàn)這種需求時多半是不好的編程習(xí)慣引起的、如剛才的例子當(dāng)中、居然給表起了一個叫“count”的名字。
----
posted on 2017-05-23 10:17 蔣樂興的技術(shù)隨筆 閱讀(2110) 評論(0) 收藏 舉報
浙公網(wǎng)安備 33010602011771號