使用者輸入如果沒有任何限制的話,則必須對特殊字元進行變換。
如果對單引號不進行變換,則會發生資料庫錯誤,甚至可能導致系統崩潰。
不過迴避方法卻非常簡單,只要將單引號[']轉換成兩個單引號['']就可以了。
例:select * from tbl where col = 'abc''def';
模糊查詢的語句雖然不會發生sql錯誤,但是不進行迴避的話,則無法得到要檢索的值。
迴避方法較單引號複雜。需要使用轉義符。將[%]轉為[\%]、[_]轉為[\_],
然後再加上[escape '\']就可以了。
例:select * from tbl where col like 'abc\%\_%' escape '\';
※最後乙個%是萬用字元。
如果做日文專案的話,會出現全形字符的[%]、[_],
而這兩個全形字符同樣會作為半形萬用字元處理。
所以在變換時,同時需要將全形的[%]、[_]進行變換。
例:select * from tbl where col like 'abc\%\_\%\_%' escape '\';
變換成這樣似乎結束了,可是不要忘了還有轉義符自身,萬一使用者輸入轉義符的話,
以上的處理就會發生sql錯誤。所以也必須對轉義符進行變換。變換方法就是將[\]轉換為[\\]。
例:select * from tbl where col like 'abc\%\_\%\\\_%' escape '\';
以上的操作都針對於一般的資料型別,如char、varchar2。
如果出現nchar、nvarchar2的話,以上的處理就會出現ora-01425錯誤。
如果改成以下寫法,則會發生ora-01424錯誤。
select * from tbl where col like '%\_%' escape to_nchar('\')
正確的寫法應該是
select * from tbl where col likec '%\_%' escape to_nchar('\')
最後要說明的是每個like都應該寫escape語句。
例:select * from tbl
where col1 like '%\_%' escape '\' or col2 like '%\_%' escape '\'
create table #temp (charcater varchar(50))
insert into #temp
values
('werwerweerwe[werwe]werwerwer')
insert into #temp
values
('werwerweerwe[zzzzzzzzzz')
insert into #temp
values
('werwerweerwe]zzzzzzzzzz')
select * from #temp where charcater like '%]%'
select * from #temp where charcater like '%[%'
如果查詢『[』的則like後應些成[,而』]『,則直接寫成]
sql處理特殊字元
我們都知道sql server查詢過程中,單引號 是特殊字元,所以在查詢的時候要轉換成雙單引號 但這只是特殊字元的乙個,在實際專案中,發現對於like操作還有以下特殊字元 下劃線 百分號 方括號 以及尖號 其用途如下 下劃線 用於代替乙個任意字元 相當於正規表示式中的 百分號 用於代替任意數目的任意...
sql處理特殊字元
我們都知道sql server查詢過程中,單引號 是特殊字元,所以在查詢的時候要轉換成雙單引號 但這只是特殊字元的乙個,在實際專案中,發現對於like操作還有以下特殊字元 下劃線 百分號 方括號 以及尖號 其用途如下 下劃線 用於代替乙個任意字元 相當於正規表示式中的 百分號 用於代替任意數目的任意...
SQL 中的特殊字元 處理
update userinfo set pageurl myjsp?page 1 color red b b color pagesize 10 where id test 怎麼處理上例中的特殊字元?兩個辦法 1 update userinfo set pageurl myjsp?page 1 co...