ORACLE 【字符集正確設定及相關操作】_41
作業系統有字符集
LINUX
[oracle@ycnode1 ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
作業系統上檢視支援所有的字符集:
linux:
[oracle@ycnode1 ~]$ locale -a
windows:
C:\Users\Administrator>chcp
活動內碼表: 936
ORACLE字符集
(1)用來儲存char,varchar2 clob long等資料型別
(2)用來標識諸如表名、列名以及PL/SQL等變數
(3)用來儲存SQL和PL/SQL程式單元等。
國際字符集
(1)用以儲存NCHAR、NVARCHAR2、NCLOB等資料型別。
如果一個表的型別是char,varchar2 clob long型別那麼使用資料庫字符集
如果表的資料型別是NCHAR、NVARCHAR2、NCLOB那麼使用國家字符集
點選(此處)摺疊或開啟
-
SQL> select * from nls_database_parameters;
-
PARAMETER VALUE
-
------------------------------ -----------------------------
-
NLS_LANGUAGE AMERICAN
-
NLS_TERRITORY AMERICA
-
NLS_CURRENCY $
-
NLS_ISO_CURRENCY AMERICA
-
NLS_NUMERIC_CHARACTERS .,
-
NLS_CHARACTERSET AL32UTF8 資料庫字符集
-
NLS_CALENDAR GREGORIAN
-
NLS_DATE_FORMAT DD-MON-RR
-
NLS_DATE_LANGUAGE AMERICAN
-
NLS_SORT BINARY
-
NLS_TIME_FORMAT HH.MI.SSXFF AM
-
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
-
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
-
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
-
NLS_DUAL_CURRENCY $
-
NLS_COMP BINARY
-
NLS_LENGTH_SEMANTICS BYTE
-
NLS_NCHAR_CONV_EXCP FALSE
- NLS_NCHAR_CHARACTERSET AL16UTF16 國家字符集
-
NLS_RDBMS_VERSION 11.2.0.3.0
- 20 rows selected
國家字符集使用的比較少,一般使用的都是資料庫字符集。國際字符集只是對資料庫字符集的補充。
Oracle的字符集命名遵循以下命名規則:
<語言><位元位數><編碼>
比如:ZHS16GBK表示採用GBK編碼格式、16位(兩個位元組)簡體中文字符集
US7ASCII 只能儲存美國人使用的字元,不超過 128個
Zhs16cgb231280 中文字符集比較老,並沒有儲存所有的
ZHS16GBK 最新的中文字符集,超集(GBK國標)
Utf8 unicode字符集,比如外企需求儲存各國人的名字,就用UTF8
繁體字符集,香港大五碼,臺灣
AL32UTF8 最全的字符集,資料庫字符集用它,這個比Utf8多的多(跨國企業用這個,效率低)
ZHS16GBK 最新的中文字符集,超集(只存中文就用這個)
AF16UTF16(國家字符集用它)
點選(此處)摺疊或開啟
-
SQL> select * from v$nls_valid_values;
-
-
PARAMETER VALUE ISDEP
-
------------------------------ ------------------------------ -----
-
LANGUAGE AMERICAN FALSE
-
LANGUAGE GERMAN FALSE
-
LANGUAGE FRENCH FALSE
-
LANGUAGE CANADIAN FRENCH FALSE
-
LANGUAGE SPANISH FALSE
-
LANGUAGE ITALIAN FALSE
-
LANGUAGE DUTCH FALSE
-
LANGUAGE SWEDISH FALSE
-
LANGUAGE NORWEGIAN FALSE
-
LANGUAGE DANISH FALSE
-
LANGUAGE FINNISH FALSE
-
LANGUAGE ICELANDIC FALSE
-
LANGUAGE GREEK FALSE
-
LANGUAGE PORTUGUESE FALSE
-
LANGUAGE TURKISH FALSE
-
LANGUAGE BRAZILIAN PORTUGUESE FALSE
-
LANGUAGE MEXICAN SPANISH FALSE
-
LANGUAGE RUSSIAN FALSE
-
LANGUAGE POLISH FALSE
-
LANGUAGE HUNGARIAN FALSE
-
LANGUAGE CZECH FALSE
-
LANGUAGE LITHUANIAN FALSE
-
LANGUAGE SLOVAK FALSE
-
LANGUAGE CATALAN FALSE
-
LANGUAGE BULGARIAN FALSE
-
LANGUAGE ROMANIAN FALSE
-
LANGUAGE SLOVENIAN FALSE
-
LANGUAGE HEBREW FALSE
-
LANGUAGE EGYPTIAN FALSE
-
LANGUAGE CROATIAN FALSE
-
LANGUAGE ARABIC FALSE
-
LANGUAGE THAI FALSE
-
LANGUAGE JAPANESE FALSE
-
LANGUAGE KOREAN FALSE
-
LANGUAGE SIMPLIFIED CHINESE FALSE
-
LANGUAGE TRADITIONAL CHINESE FALSE
-
LANGUAGE ENGLISH FALSE
-
LANGUAGE LATIN AMERICAN SPANISH FALSE
-
LANGUAGE UKRAINIAN FALSE
-
LANGUAGE ESTONIAN FALSE
-
LANGUAGE GERMAN DIN FALSE
-
LANGUAGE MALAY FALSE
-
LANGUAGE VIETNAMESE FALSE
-
LANGUAGE BENGALI TRUE
-
LANGUAGE LATVIAN FALSE
-
LANGUAGE INDONESIAN FALSE
-
LANGUAGE HINDI FALSE
-
LANGUAGE TAMIL FALSE
-
LANGUAGE KANNADA FALSE
-
LANGUAGE TELUGU FALSE
-
LANGUAGE ORIYA FALSE
-
LANGUAGE MALAYALAM FALSE
-
LANGUAGE ASSAMESE FALSE
-
LANGUAGE GUJARATI FALSE
-
LANGUAGE MARATHI FALSE
-
LANGUAGE PUNJABI FALSE
-
LANGUAGE BANGLA FALSE
-
LANGUAGE AZERBAIJANI FALSE
-
LANGUAGE MACEDONIAN FALSE
-
LANGUAGE CYRILLIC SERBIAN FALSE
-
LANGUAGE LATIN SERBIAN FALSE
-
LANGUAGE CYRILLIC UZBEK FALSE
-
LANGUAGE LATIN UZBEK FALSE
-
LANGUAGE CYRILLIC KAZAKH FALSE
-
LANGUAGE ALBANIAN FALSE
-
TERRITORY AMERICA FALSE
-
TERRITORY UNITED KINGDOM FALSE
-
TERRITORY GERMANY FALSE
-
TERRITORY FRANCE FALSE
-
TERRITORY CANADA FALSE
-
TERRITORY SPAIN FALSE
-
TERRITORY ITALY FALSE
-
TERRITORY THE NETHERLANDS FALSE
-
TERRITORY SWEDEN FALSE
-
TERRITORY NORWAY FALSE
-
TERRITORY DENMARK FALSE
-
TERRITORY FINLAND FALSE
-
TERRITORY ICELAND FALSE
-
TERRITORY GREECE FALSE
-
TERRITORY PORTUGAL FALSE
-
TERRITORY TURKEY FALSE
-
TERRITORY BRAZIL FALSE
-
TERRITORY MEXICO FALSE
-
TERRITORY CIS TRUE
-
TERRITORY CROATIA FALSE
-
TERRITORY POLAND FALSE
-
TERRITORY HUNGARY FALSE
- TERRITORY CZECHOSLOVAKIA TRUE
- ... ...
-
- 496 rows selected.
資料庫支援這麼多字符集。
如果軟體有字符集,那麼資料庫字符集就不用了,sqlplus沒有字符集,那麼sqlplus使用作業系統字符集。
我們研究客戶端作業系統和資料庫的字符集。
sqlplus客戶端登陸伺服器結構:所有字符集的轉換都在oracle端進行的。
你把客戶端設定成16gbkORACLE就認為客戶端是16gbk,客戶端真正的字符集不是這個,他的作用只是傳話,使得oracle認為客戶端就是16gbk
客戶端字符集通常中文字符集、utf8
NLS_LANG的設定就是將其設定成客戶端作業系統的字符集。
不論oracle儲存還是讀取都經過NLS_LANG
[oracle@linux6 ~]$ export NLS_LANG=american_america.utf8
sqlplus本身沒有字符集,他參考客戶端作業系統的字符集。如果軟體有字符集,那麼軟體就不參考資料庫的字符集。
所有的字符集轉換都是在oracle端發生的。
當我們在sqlplus中輸入中文“中國”的時候,被作業系統編碼,編碼出幾個數字,編碼從客戶端傳到oracle,oracle拿到編碼,轉化成字符集,oracle必須知道這個編碼是由什麼編的。
結論:如果客戶端字符集和資料庫字符集一樣,那麼資料庫直接儲存傳過來的編碼;如果客戶端是zhs16gbk,資料庫是utf-8,那麼傳過來的是zhs16gbk編碼,在資料庫端轉化成zhs16gbk的字元,然後這些字元再轉化成utf-8的編碼,儲存到表中。(資料庫儲存時,儲存的是編碼)
NLS_LANG 這個引數在客戶端設的。oracle想要知道作業系統的字符集,這個引數設定成16gbk,那麼oracle就認為你的客戶端作業系統的字符集就是zhs16gbk。
NLS_LANG的引數設定的和客戶端一樣。
這是最隱蔽的一個錯誤。
點選(此處)摺疊或開啟
-
SQL> select ename , job , dump(ename ,1016) from emp;
-
ENAME JOB DUMP(ENAME,1016)
-
---------- --------- --------------------------------------------------------------------------------
-
姚崇 CLERK Typ=1 Len=4 CharacterSet=ZHS16GBK: d2,a6,b3,e7
- 姚崇 SALESMAN Typ=1 Len=4 CharacterSet=ZHS16GBK: d2,a6,b3,e7
當儲存的時候發生轉換時錯誤的,那麼這個是非常危險的!!!
點選(此處)摺疊或開啟
-
SQL> select dump(\'姚崇\',1016) from dual;
-
DUMP(\'姚崇\',1016)
-
-----------------------------------------------
- Typ=96 Len=4 CharacterSet=ZHS16GBK: d2,a6,b3,e7
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
AMERICAN的意思是oracle反饋資訊,比如登入報錯的提示資訊是用什麼語言提示的。
AMERICA 貨幣符號,日期格式用美國的格式,貨幣等等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-1336101/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle字符集相關整理Oracle
- Mac開發相關設定操作Mac
- 列表及相關操作
- 字典及相關操作
- 關於mysql字符集及排序規則設定MySql排序
- oracle 安裝相關引數設定Oracle
- Oracle exp/imp字符集相關問題Oracle
- Oracle 資料庫常見檔案及相關操作Oracle資料庫
- oracle關於分割槽相關操作Oracle
- GoLand 相關設定GoLand
- 設定SecureCRT來正確顯示彩色Securecrt
- Oracle8i,9i Standby引數設定及相關說明Oracle
- Oracle表空間相關操作Oracle
- 設定ORACLE客戶端字符集Oracle客戶端
- python的字典及相關操作Python
- 關於Oracle LOGMNR找不到dml操作及補充日誌相關Oracle
- SAP basis 相關設定
- SAP basis 相關設定
- 前端設計,確定按鈕正慢慢消失前端
- 如何正確設定動態TextView的textSizeTextView
- Oracle exp 設定客戶端字符集Oracle客戶端
- MySQL 中的約束及相關操作MySql
- HAC叢集部署vip及相關操作
- Oracle字符集的檢視查詢和Oracle字符集的設定修改Oracle
- Hive優化相關設定Hive優化
- JS 繼承的正確操作JS繼承
- mysql 解決字符集錯誤 正確摘錄MySql
- rman配置及常用操作相關知識點
- JSON及Python操作JSON相關JSONPython
- 【LC】locale設定查詢及相關環境變數含義及示例變數
- uni-app正確設定頁面背景色APP
- vmware gsx server正確設定共享磁碟注意事項Server
- css中關於table的相關設定CSS
- 關於Oracle,作業系統,客戶端字符集的最佳設定(zt)Oracle作業系統客戶端
- 各種相關的圖結構-定義及相關研究進展
- 設定Mysql字符集MySql
- mysql字符集設定MySql
- Oracle Linux 7設定中文字符集OracleLinux