亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 11762 | 回復(fù): 5
打印 上一主題 下一主題

SHOW CREATE TABLE取出的語句,運(yùn)行為何總是有語法錯誤呢? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-04-12 12:31 |只看該作者 |倒序?yàn)g覽
技術(shù)背景:
剛開始學(xué)習(xí)MySQL時候,有時偷懶,會用SHOW CREATE TABLE 表名\G來復(fù)制表創(chuàng)建語句,可是當(dāng)運(yùn)行的時候總會因?yàn)?quot;表名和列名上有單引號",提示語法錯誤不能運(yùn)行。
問題列表:
1,為什么會出錯呢?
2,有什么解決方法?
解決問題:
1,分析show create table拷貝的語句出錯原因
1.1 重現(xiàn)過程
1.1.1 創(chuàng)建測試表test,并通過show create table test取得表的創(chuàng)建語句,可見表名,列名都用引號包著。
mysql> create table test(
-> id int not null,
-> primary key(id)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> show create table test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
1.1.2 drop掉test表,再復(fù)制剛才的創(chuàng)建語句,執(zhí)行后,出現(xiàn)預(yù)期的語法錯誤。
mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)
mysql> Create Table: CREATE TABLE `test` (
-> `id` int(11) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-> ;
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 ': CREATE

1.2 原理
1.2.1 如果仔細(xì)看`test`與單引號的'test'外觀上有點(diǎn)區(qū)別,那用字符串函ASCII()來驗(yàn)證一下(復(fù)制語句中`)。
從下面測試結(jié)果可知,`的ASCII碼是96, 那查看碼表后,才知`是"重音符",不是ASCII為39的單引號。
mysql> select ASCII('`');
+------------+
| ASCII('`') |
+------------+
| 96 |
+------------+
//查看單引號的ASCII碼
mysql> select ASCII("'");
+------------+
| ASCII("'") |
+------------+
| 39 |
+------------+
說明:重音符在鍵盤第二排第一個鍵,發(fā)現(xiàn)的時候,我表示相當(dāng)尷尬。
2 解決問題
2.1 利用Session設(shè)置參數(shù)set sql_quote_show_create=0;
2.1.1 sql_quote_show_create,有兩個值(1,0),默認(rèn)是1,表示表名和列名會用``包著的。
這個服務(wù)器參數(shù)只可以在session級別設(shè)置,不支持global設(shè)置的(不支持my.cnf設(shè)置)。
設(shè)置后,可見下面的沒有重音符了。
mysql> set sql_quote_show_create=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show create table test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
2.2 使用pager來處理輸出
mysql> pager tr -d '`'
PAGER set to 'tr -d '`''
mysql> show create table test;
+-------+------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

3, 命令行的使用:偷懶是一回事,如果在寫shell, python等工具的時候,可能會根據(jù)show create table來處理一些事情,即“命令行處理”
3.1 用'SET SQL_QUOTE_SHOW_CREATE=0
-bash-3.2$ mysql -uroot -e 'SET SQL_QUOTE_SHOW_CREATE=0; use test; show create table test';
+-------+------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------------------+
3.2
-bash-3.2$ mysql -e 'use test; show create table test \G' | tr -d '`';
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
3.3 也可以使用sed來解決
-bash-3.2$ mysql -e 'use test; show create table test \G' | sed -e 's/`//g';
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
參考:
MySQL 5.1 英文文檔471頁
http://datacharmer.blogspot.com/ ... here-is-no-way.html

論壇徽章:
4
CU大牛徽章
日期:2013-03-13 15:32:35CU大;照
日期:2013-03-13 15:38:15CU大;照
日期:2013-03-13 15:38:52戌狗
日期:2013-12-27 15:08:11
2 [報告]
發(fā)表于 2012-04-12 13:49 |只看該作者
學(xué)習(xí)了

論壇徽章:
0
3 [報告]
發(fā)表于 2012-04-12 14:20 |只看該作者
回復(fù) 2# 小版主殺手
,只是一個蛋疼的小問題,實(shí)用性不大。

   

論壇徽章:
2
摩羯座
日期:2014-05-29 17:38:40數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-05 06:20:00
4 [報告]
發(fā)表于 2012-04-12 18:30 |只看該作者
``著重號  mysql 會把這其中部分認(rèn)為是一個整體值,避免歧義和關(guān)鍵詞
‘’ 單引號,
另外,樓主你想多了,可以直接copy然后執(zhí)行的,只是你復(fù)制多了
mysql> Create Table: CREATE TABLE `test` (
-> `id` int(11) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-> ;

“create table:”這2個詞不用復(fù)制

論壇徽章:
2
摩羯座
日期:2014-05-29 17:38:40數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-05 06:20:00
5 [報告]
發(fā)表于 2012-04-12 18:32 |只看該作者
本帖最后由 devilkin0312 于 2012-04-12 18:32 編輯

如果在程序里面,直接匹配到create table `test`(........就可以了

論壇徽章:
0
6 [報告]
發(fā)表于 2012-04-12 18:39 |只看該作者
回復(fù) 5# devilkin0312
確實(shí)呢。!謝謝指正,差點(diǎn)誤人子弟了

   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP