1、問題描述
Mysql 裏面SQL語句空格、字符串問題,你發現不了,但是就是運行報錯。不服?來我們上源碼。先來看一個刪除表的。
DROP TABLE IF EXISTS 'user';
堂堂正正刪除表,沒毛病,運行。
1 queries executed, 0 success, 1 errors, 0 warnings
查詢:DROP TABLE IF EXISTS 'user'
錯誤代碼: 1064
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 ''user'' at line 1
執行耗時 : 0 sec
傳送時間 : 0 sec
總耗時 : 0 sec
什麼鬼。這裏user
不能用字符串的引號。只能用mysql
自帶的引號。
DROP TABLE IF EXISTS `user`;
對比下這兩種寫法在SQLYog
中的效果。執行SQL語句。
1 queries executed, 1 success, 0 errors, 1 warnings
查詢:DROP TABLE IF EXISTS `user`
共 0 行受到影響, 1 個警告
執行耗時 : 0 sec
傳送時間 : 1.183 sec
總耗時 : 1.184 sec
注意:要查看所有警告的完整列表,請啓用 工具 -> 首選項 -> 常規 -> 在信息選項卡下顯示警告
再來個大招,關於空格的。
CREATE TABLE `role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
也是堂堂正正建立一個表。沒毛病。執行SQL語句。
1 queries executed, 0 success, 1 errors, 0 warnings
查詢:CREATE TABLE `role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_bin NOT NULL...
錯誤代碼: 1064
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 'CREATE TABLE `role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`n' at line 1
執行耗時 : 0 sec
傳送時間 : 0 sec
總耗時 : 0 sec
我的個親孃嘞!還有沒有王法。是的就是空格的問題。我們拿到記事本過濾一下再拷貝回來執行SQL語句。
CREATE TABLE role(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
大家肉眼看看和上面有什麼區別,看出來的話,你是我大哥,我水土不服舅服你。執行SQL語句。
1 queries executed, 1 success, 0 errors, 0 warnings
查詢:CREATE TABLE role( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ...
共 0 行受到影響
執行耗時 : 0.027 sec
傳送時間 : 1.171 sec
總耗時 : 1.199 sec
看似一毛一樣,竟然執行成功了。我們來看看SQLyog
中兩段代碼的差別。
確實空格不同,顏色也不同。接下來看看Navicat
的,一毛一樣,還是SQLyog
好啊。
遇到這樣的問題想必各位會直接哭暈在廁所了。不說了,我剛剛醒。
2、總結
書上的代碼直接運行絕大部分是對的,但是總有一些軟件的更新使得作者無能爲力。之前的API是對的,但是之後就廢棄了或修改了是常有的事。所以我們需要跟蹤源代碼。這只是一個小小的問題,如果沒有前輩的無私奉獻,很難想象我們自己一天能學到多少內容。感謝各位前輩的辛勤付出,讓我們少走了很多的彎路!
點個贊再走唄!歡迎留言哦!