插入數據時遇到一個奇怪的問題,插入中文報錯ORA-01756: quoted string not properly terminated
簡單的復現測試如下:
查看客戶端及數據庫字符集
可以看到字符集是一樣的,如果不同,設置客戶端字符集與數據庫端相同再測試
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
找了網上好多文章都是說設置客戶端字符集與數據庫端相同就ok,但我們的還是有問題。
最後發現是secureCRT客戶端字符集的問題,設置是UTF-8,導致ZHS16GBK無法識別。
需要調整secureCRT客戶端字符集爲gb2312
從別的客戶端查詢
補充一種網上看到的錯誤做法
文章的建議是設置客戶端字符集爲 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
經過測試這樣插入時不會報錯(因爲AL32UTF8能識別到secureCRT客戶端字符集UTF8),在插入的客戶端查詢數據也正常,但是通過別的字符集爲ZHS16GBK的客戶端來查就會出現亂碼(例如???)。
其實dump數據時也遇到過ZHS16GBK -> AL32UTF8 中文能正常顯示,但是 AL32UTF8 -> ZHS16GBK 中文會變爲亂碼,原理是一樣的。
這隻會導致問題更加難以發現,後期排查處理更麻煩。