首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 特殊字符插入完全手冊:29 類符號的轉義語法與實戰範例

     編輯:DB2 教學

背景與核心機制

DB2 中若直接在字串字面值內出現單引號、反斜線等特殊字元,會導致 SQL 剖析錯誤。DB2 提供 @# ... @# 包裹語法 作為通用轉義機制:欲插入的特殊字元置於 @# 與 @# 之間,資料庫引擎會自動解碼為實際字元並寫入資料行。

29 類常見特殊字元插入語法速查表

# 目標字元 單純插入範例 混合字串範例
1單引號 'INSERT INTO t VALUES('@#''@#');INSERT INTO t VALUES('@#A''B@#');
2波浪號 ~INSERT INTO t VALUES('@#~@#');INSERT INTO t VALUES('@#A~B@#');
3驚嘆號 !INSERT INTO t VALUES('@#!@#');INSERT INTO t VALUES('@#A!B@#');
4At 符號 @INSERT INTO t VALUES('@#@@#');INSERT INTO t VALUES('@#A@B@#');
5井號 #INSERT INTO t VALUES('@##@#');INSERT INTO t VALUES('@#A#B@#');
6美元符 $INSERT INTO t VALUES('@#$@#');INSERT INTO t VALUES('@#A$B@#');
7百分號 %INSERT INTO t VALUES('@#%@#');INSERT INTO t VALUES('@#A%B@#');
8插入符 ^INSERT INTO t VALUES('@#^@#');INSERT INTO t VALUES('@#A^B@#');
9AND 符 &INSERT INTO t VALUES('@#&@#');INSERT INTO t VALUES('@#A&B@#');
10星號 *INSERT INTO t VALUES('@#*@#');INSERT INTO t VALUES('@#A*B@#');
11左括號 (INSERT INTO t VALUES('@#(@#');INSERT INTO t VALUES('@#A(B@#');
12右括號 )INSERT INTO t VALUES('@#)@#');INSERT INTO t VALUES('@#A)B@#');
13底線 _INSERT INTO t VALUES('@#_@#');INSERT INTO t VALUES('@#A_B@#');
14減號 -INSERT INTO t VALUES('@#-@#');INSERT INTO t VALUES('@#A-B@#');
15加號 +INSERT INTO t VALUES('@#+@#');INSERT INTO t VALUES('@#A+B@#');
16等號 =INSERT INTO t VALUES('@#=@#');INSERT INTO t VALUES('@#A=B@#');
17斜線 /INSERT INTO t VALUES('@#/@#');INSERT INTO t VALUES('@#A/B@#');
18小於號 <INSERT INTO t VALUES('@#<@#');INSERT INTO t VALUES('@#A<B@#');
19大於號 >INSERT INTO t VALUES('@#>@#');INSERT INTO t VALUES('@#A>B@#');
20問號 ?INSERT INTO t VALUES('@#?@#');INSERT INTO t VALUES('@#A?B@#');
21冒號 :INSERT INTO t VALUES('@#:@#');INSERT INTO t VALUES('@#A:B@#');
22分號 ;INSERT INTO t VALUES(CHR(59));INSERT INTO t VALUES('A' || CHR(59) || 'B');
23雙 @#(轉義包裹符本身)INSERT INTO t VALUES('@#@#@#@#');INSERT INTO t VALUES('@#A@#@#@#B@#');
24反引號 `INSERT INTO t VALUES('@#`@#');INSERT INTO t VALUES('@#A`B@#');
25管線符 |INSERT INTO t VALUES('@#|@#');INSERT INTO t VALUES('@#A|B@#');
26反斜線 \INSERT INTO t VALUES('@#\\@#');INSERT INTO t VALUES('@#A\\B@#');
27左大括號 {INSERT INTO t VALUES('@#{@#');INSERT INTO t VALUES('@#A{B@#');
28右大括號 }INSERT INTO t VALUES('@#}@#');INSERT INTO t VALUES('@#A}B@#');
29方括號 [ ]INSERT INTO t VALUES('@#[@#');
INSERT INTO t VALUES('@#]@#');
INSERT INTO t VALUES('@#A[B@#');
INSERT INTO t VALUES('@#A]B@#');

關鍵注意事項

  1. 分號 ; 特例:因 ; 是 SQL 陳述式終結符,無法直接置於 @# 內,必須改用 CHR(59) 函式或連接運算子 || 組合。
  2. @# 包裹符本身:若資料確實包含字面字串 @#,需雙寫轉義:@#@#@#@#(外層包裹 + 內層雙寫)。
  3. 參數化查詢優先:應用程式開發時,強烈建議使用 PreparedStatement 參數綁定(INSERT INTO t VALUES(?)),由驅動程式自動處理轉義,避免手工拼接 SQL 帶來的注入風險與維護負擔。
  4. CHR() 通用替代方案:任何可列印/不可列印 ASCII 字元均可用 CHR(ascii_code) 表示,如 CHR(9) (Tab)、CHR(10) (LF)、CHR(13) (CR)。

實戰範本:批次匯入含特殊字元的 CSV

-- 假設 CSV 欄位以 | 分隔,資料可能含單引號、逗號等
LOAD FROM data.csv OF DEL MODIFIED BY CHARDEL@#|@# 
     METHOD P(1, 2, 3) 
     MESSAGES load.msg 
     INSERT INTO target_table (col1, col2, col3) 
     NONRECOVERABLE;

掌握 @#...@# 包裹語法與 CHR() 函式,配合參數化查詢最佳實踐,即可從容應對 DB2 中任何特殊字元的插入與處理需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved