服務端字元集
作業系統字元集
NLS_LANG字元集
SELECT * FROM NLS_DATABASE_PARAMETERS
locale
export
american_america.AL32UTF8
en_US.UTF-8
AMERICAN_AMERICA.ZHS16GBK
服務端字元集,NLS_CHARACTERSET: ZHS16GBK。
用戶端os locale:LANG="en_US.UTF-8”。
環境變量NLS_LANG 沒有配置。
插件中文INSERT INTO mysql_test_10 VALUES (2, '中國');中文是UTF-8編碼。
讀取中文select * from mysql_test_10,發現顯示亂碼。
檢查oracle存儲的編碼,發現存儲編碼錯誤。
正确的UTF編碼(中國e4,b8,ad,e5,9b,bd)GBK編碼(d6,d0,b9,fa)
設定NLS_LANG與用戶端os字元集相同。
NLS_LANG=american_america.AL32UTF8;
client端使用UTF8編碼,發送到Oracle server端後,server端讀取NLS_LANG是空後,直接用GBK編碼了資料,于是存儲時,字元就錯亂了,大小6位元組。
設定NLS_LANG=american_america.AL32UTF8後,server端會先到UTF8編碼表中查詢,翻譯後以GBK編碼存儲,大小4位元組。
NLS_LANG 與用戶端os字元集要保持一緻。
為了減少翻譯開銷,最好“服務端字元集”,“用戶端os字元集”和NLS_LANG,3者保持一緻。
歡迎加入橙鷹資料, [email protected]
<a href="https://www.cnblogs.com/xdouby/p/5666624.html">https://www.cnblogs.com/xdouby/p/5666624.html</a>
<a href="https://www.cnblogs.com/bingo1717/p/7803359.html">https://www.cnblogs.com/bingo1717/p/7803359.html</a>