今天客戶那邊遇到了乙個比較奇葩的問題跑來問我,這個問題比較冷門,所以特別記錄下。資料庫的字段存在斜槓或者空格的時候,怎麼用sql進行insert或者select操作。
對於這種特殊字元,我們一般想到的是用轉義符進行處理,所以試了下"/"、引號、單引號等常見的轉義符,發現依然語法錯誤,又查了下mysql的官方說明:
特殊字元位於列名中時必須進行轉義,如果列名中包含\t,(,),/,\,=,<,>,+,-,*,^,",',[,],~,#,|,&,% 則必須用中括號括起來。eg:列名為column#,應寫為[column#];列名包括中括號,必須使用斜槓進行轉義,eg:列名為column的列應寫為[column[\]](只有第二個中括號必須轉義)。
以中括號的形式進行轉義,然後又試了下中括號,發現依然還是不行。
通過搜尋,最後找到需要以反引號「`」(一般鍵盤的左上角數字1左邊的那個鍵)來處理。
之前對反引號幾乎沒有使用過,所以藉此機會搜尋總結了下反引號相關的用法。
特殊的賦值
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。
總結反引號裡面的字串必須是能執行的命令,否則會出錯;它的作用是命令替換,將其中的字串當成shell命令執行,返回命令的執行結果。
為了區分mysql的保留字與普通字元而引入的符號
舉個例子:select `select` from `test` where select='字段值'引號一般用在字段的值,如果字段值是字元或字串,則要加引號,如:select='字段值'在test表中,有個select欄位,如果不用反引號,mysql將把select視為保留字而導致出錯,所以,有mysql保留字作為欄位的,必須加上反引號來區分。
不加反引號建的表不能包含mysql保留字,否則出錯
反引號`,數字1左邊的符號
保留字不能用於表名,比如desc,此時需要加入反引號來區別,但使用表名時可忽略反引號。
sql
create table desc報錯
create tabledesc
成功
create tabletest
成功
drop table test成功
保留字不能用於欄位名,比如desc,此時也需要加入反引號,並且insert等使用時也要加上反引號。
```sql```
create table `test`(`desc` varchar(255))成功
insert into test(desc) values('fxf')失敗
insert into test(`desc`) values('fxf')成功
mysql中判斷字段是否包含數字或者是否為純數字
name like 0 9 select from table where name like 1 select from table where find in set 1,字段 find in set str strlist str要查詢的字串 strlist 欄位名 引數以 分隔 如 1,2,...
C 中巨集包含空的引數
衝擊年薪50w,助你高階python工程師 inline void printvalidatemsg const char file,int line,const char cond,const char msg define my validate cond,ret,msg if cond els...
MySQL中反斜槓轉義應用
問題描述 mysql中帶有反斜槓的內容入庫後,發現反斜槓無故失蹤了 俗話說被吃掉了 例 插入insert into tb url values absc eeee 結果資料庫裡的內容是 absceeee 反斜槓沒了呢 這麼詳細了相信大家都搞清楚問題了吧,下面看解決方案 insert into tb ...