ZHS16GBK字符集插入中文時報錯ORA-01756

插入數據時遇到一個奇怪的問題,插入中文報錯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 中文會變爲亂碼,原理是一樣的。

這隻會導致問題更加難以發現,後期排查處理更麻煩。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章