mysql 列名中 包含斜槓或者空格的處理方式

2022-01-30 12:03:14 字數 1917 閱讀 6145

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

資料庫的字段存在斜槓或者空格的時候,怎麼用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='字段值'

在test表中,有個select欄位,如果不用反引號,mysql將把select視為保留字而導致出錯,所以,有mysql保留字作為欄位的,必須加上反引號來區分。

引號一般用在字段的值,如果字段值是字元或字串,則要加引號,如:select='字段值'

不加反引號建的表不能包含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 ...