今天客戶那邊遇到了一個(gè)比較奇葩的問(wèn)題跑來(lái)問(wèn)我,這個(gè)問(wèn)題比較冷門,所以特別記錄下。

問(wèn)題描述

數(shù)據(jù)庫(kù)的字段存在斜杠或者空格的時(shí)候,怎么用sql進(jìn)行insert或者select操作。

問(wèn)題解答

對(duì)于這種特殊字符,我們一般想到的是用轉(zhuǎn)義符進(jìn)行處理,所以試了下"/"、引號(hào)、單引號(hào)等常見(jiàn)的轉(zhuǎn)義符,發(fā)現(xiàn)依然語(yǔ)法錯(cuò)誤,又查了下mysql的官方說(shuō)明:

特殊字符位于列名中時(shí)必須進(jìn)行轉(zhuǎn)義,如果列名中包含\t,(,),/,\,=,<,>,+,-,*,^,",',[,],~,#,|,&,% 則必須用中括號(hào)括起來(lái)。eg:列名為Column#,應(yīng)寫為[Column#];列名包括中括號(hào),必須使用斜杠進(jìn)行轉(zhuǎn)義,eg:列名為Column[]的列應(yīng)寫為[Column[\]](只有第二個(gè)中括號(hào)必須轉(zhuǎn)義)。

以中括號(hào)的形式進(jìn)行轉(zhuǎn)義,然后又試了下中括號(hào),發(fā)現(xiàn)依然還是不行。

通過(guò)搜索,最后找到需要以反引號(hào)“`”(一般鍵盤的左上角數(shù)字1左邊的那個(gè)鍵)來(lái)處理。

其它反引號(hào)的用法

之前對(duì)反引號(hào)幾乎沒(méi)有使用過(guò),所以借此機(jī)會(huì)搜索總結(jié)了下反引號(hào)相關(guān)的用法。

Linux反引號(hào)的作用

特殊的賦值
Shell中可以將數(shù)字或字符直接賦予變量,也可以將Linux命令的執(zhí)行結(jié)果賦予變量,如下:

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

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

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

反引號(hào)的作用
反引號(hào)的作用就是將反引號(hào)內(nèi)的Linux命令先執(zhí)行,然后將執(zhí)行結(jié)果賦予變量。盡管可以通過(guò)輸入字符或者字符串來(lái)創(chuàng)建變量值,也可以獲取來(lái)自于其他Linux命令的值。為把Linux命令的結(jié)果賦予變量,實(shí)現(xiàn)需要執(zhí)行這個(gè)命令。如果在命令行上把Linux命令放在反引號(hào)中,這個(gè)命令會(huì)首先被執(zhí)行,其結(jié)果會(huì)成為命令行的一個(gè)參數(shù)。在賦值時(shí),通過(guò)把命令放在反引號(hào)中,以便于首先執(zhí)行,命令的執(zhí)行結(jié)果會(huì)被賦予一個(gè)變量。反引號(hào)可以被視為由要執(zhí)行命令組成的表達(dá)式,其結(jié)果會(huì)被賦予變量。組成命令的字符本身不會(huì)被賦予。在下面的范例中,命令ls .c被執(zhí)行,其結(jié)果然后被賦予變量listc。ls .c會(huì)生成具有.c擴(kuò)展名的所有文件列表。這個(gè)文件列表隨后被賦予變量listc。

網(wǎng)友評(píng)論