MySQL列名中包含斜槓或者空格的處理方法

今天客戶那邊遇到了一個比較奇葩的問題跑來問我,這個問題比較冷門,所以特別記錄下。

問題描述

數據庫的字段存在斜槓或者空格的時候,怎麼用sql進行insert或者select操作。

問題解答(http://www.2hxn.com

對於這種特殊字符,我們一般想到的是用轉義符進行處理,所以試了下"/"、引號、單引號等常見的轉義符,發現依然語法錯誤,又查了下mysql的官方說明:
特殊字符位於列名中時必須進行轉義,如果列名中包含\t,(,),/,\,=,<,>,+,-,*,^,",',[,],~,#,|,&,% 則必須用中括號括起來。eg:列名爲Column#,應寫爲[Column#];列名包括中括號,必須使用斜槓進行轉義,eg:列名爲Column[]的列應寫爲[Column[\]](只有第二個中括號必須轉義)。

以中括號的形式進行轉義,然後又試了下中括號,發現依然還是不行。

通過搜索,最後找到需要以反引號“`”(一般鍵盤的左上角數字1左邊的那個鍵)來處理。

其它反引號的用法

之前對反引號幾乎沒有使用過,所以藉此機會搜索總結了下反引號相關的用法。

Linux反引號的作用

特殊的賦值
Shell中可以將數字或字符直接賦予變量,也可以將Linux命令的執行結果賦予變量,如下:

(1) $ count=9 #將數字賦予變量count

(2) $ name="ming" #將字符賦予變量name

(3) $ listc=`ls -la` #將Linux命令賦予listc,listc的值就是該命令的執行結果

反引號的作用
 反引號的作用就是將反引號內的Linux命令先執行,然後將執行結果賦予變量。儘管可以通過輸入字符或者字符串來創建變量值,也可以獲取來自於其他Linux命令的值。爲把Linux命令的結果賦予變量,實現需要執行這個命令。如果在命令行上把Linux命令放在反引號中,這個命令會首先被執行,其結果會成爲命令行的一個參數。在賦值時,通過把命令放在反引號中,以便於首先執行,命令的執行結果會被賦予一個變量。反引號可以被視爲由要執行命令組成的表達式,其結果會被賦予變量。組成命令的字符本身不會被賦予。在下面的範例中,命令ls .c被執行,其結果然後被賦予變量listc。ls .c會生成具有.c擴展名的所有文件列表。這個文件列表隨後被賦予變量listc。

總結(http://www.2hxn.com

反引號裏面的字符串必須是能執行的命令,否則會出錯;它的作用是命令替換,將其中的字符串當成Shell命令執行,返回命令的執行結果。

mysql中反引號的作用

爲了區分MYSQL的保留字與普通字符而引入的符號

舉個例子:SELECT `select` FROM `test` WHERE select='字段值'
在test表中,有個select字段,如果不用反引號,MYSQL將把select視爲保留字而導致出錯,所以,有MYSQL保留字作爲字段的,必須加上反引號來區分。

引號一般用在字段的值,如果字段值是字符或字符串,則要加引號,如:select='字段值'
不加反引號建的表不能包含MYSQL保留字,否則出錯

反引號`,數字1左邊的符號
 保留字不能用於表名,比如desc,此時需要加入反引號來區別,但使用表名時可忽略反引號。
create table desc報錯
create table `desc`成功
create table `test`成功
drop table test成功

保留字不能用於字段名,比如desc,此時也需要加入反引號,並且insert等使用時也要加上反引號。
create table `test`(`desc` varchar(255))成功
insert into test(desc) values('fxf')失敗
insert into test(`desc`) values('fxf')成功

本文引用:http://www.2hxn.com


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章