亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5130 | 回復: 3
打印 上一主題 下一主題

[數(shù)據(jù)庫] ORACLE字符集的一些經(jīng)典技巧 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-11-22 17:59 |只看該作者 |倒序瀏覽
之前安裝LINUX +ORACLE 的時候都是選擇的英文字,字符集的問題,沒太在意過
昨天重新安裝的時候,把linux安裝成中文,
然后再安裝oracle的時候把字符集也改成了zhs16gbk 而國家字符集依舊用的al16utf16,
然后不期而是致的亂碼,問號等等,搞得頭大,今天終于解決掉了,在這里和大家分享一下我實際測試的效果!!


環(huán)境
服務器OS:Linux Redhat Enterprise 5 64位
服務器OS字符集
[oracle@oraclelzw ~]$ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

客戶端OS:WIN7 64位 客戶端工具 ORACLE SQL DEVELOPER TOOLS
字符集:936  沒特別修改過,估計簡體中文^_^

數(shù)據(jù)庫字符集及數(shù)據(jù)庫國家字符集查詢結果
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               ZHS16GBK
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.1.0
???????

就是這問號看著不爽~~~


[oracle@oraclelzw ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 22 17:02:01 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


???:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options



在.bash_profile添加兩條環(huán)境變量
export NLS_LANG=american_america.UTF8
export LANG=en_US.UTF8

修改后登錄

[oracle@oraclelzw ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 22 17:00:48 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>


SQL> select * from nls_database_parameters;

PARAMETER            VALUE
-------------------- ------------------------------
NLS_LANGUAGE         AMERICAN
NLS_TERRITORY        AMERICA
NLS_CURRENCY         $
NLS_ISO_CURRENCY     AMERICA
NLS_NUMERIC_CHARACTE .,
RS

NLS_CHARACTERSET     ZHS16GBK
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_FOR DD-MON-RR HH.MI.SSXFF AM TZR
MAT

NLS_DUAL_CURRENCY    $
NLS_COMP             BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP  FALSE
NLS_NCHAR_CHARACTERS AL16UTF16
ET

NLS_RDBMS_VERSION    11.2.0.1.0

20 rows selected.



SQL> select * from nls_session_parameters;

PARAMETER            VALUE
-------------------- ------------------------------
NLS_LANGUAGE         AMERICAN
NLS_TERRITORY        AMERICA
NLS_CURRENCY         $
NLS_ISO_CURRENCY     AMERICA
NLS_NUMERIC_CHARACTE .,
RS

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_FOR DD-MON-RR HH.MI.SSXFF AM TZR
MAT

NLS_DUAL_CURRENCY    $
NLS_COMP             BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP  FALSE

17 rows selected.

問題好像是解決了,但還是擔心,之前老師講過,不可以隨便修改字符集的設置

設定字符集的原則  NLS_LANG參數(shù)其字符集必須與操作系統(tǒng)本身一致,否則,即使是當前環(huán)境數(shù)據(jù)是正常的.換一個正常環(huán)境后,必定會亂碼

以下我自己的測試
LINUX  OS字符集是 UTF8
當我把NLS_LANG=american_america.zhs16gbk


SQL> select dump('中國',1016) from dual;

DUMP('中國',1016)
-----------------------------------------------------
Typ=96 Len=6 CharacterSet=ZHS16GBK: e4,b8,ad,e5,9b,bd


在WINDOWS 下的ORACLE SQL DEVELOPER TOOLS (因為沒做特定的修改此處肯定是一致的)

Typ=96 Len=4 CharacterSet=ZHS16GBK: d6,d0,b9,fa

果然發(fā)現(xiàn)這個很隱蔽的錯誤,而且是幾乎不可逆的,因為把錯誤的代碼寫到了數(shù)據(jù)庫里面。


當然如果希望讓SQLPLUS 顯示中文也可以把NLS參數(shù)設成如下
export NLS_LANG=SIMPLIFIED\ CHINESE_CHINA.UTF8

這樣,在SQLPLUS登錄以后,部分顯示為中文,像我這種英文不太好的同志,學習起來會方便一些

[oracle@oraclelzw ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 22 17:30:25 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

當前會話被修改了:
SQL> select * from nls_session_parameters;

PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                   SIMPLIFIED CHINESE
NLS_TERRITORY                  CHINA
NLS_CURRENCY                   ¥
NLS_ISO_CURRENCY               CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM

PARAMETER                      VALUE
------------------------------ ------------------------------
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

已選擇17行。


SQL> select dump('中國',1016) from dual;

DUMP('中國',1016)
--------------------------------------------------------------------------------
Typ=96 Len=4 CharacterSet=ZHS16GBK: d6,d0,b9,fa


和之前在 ORACLE SQL DEVELOPER TOOLS DUMP的結果一致~~OK





最后的總結:
在客戶端操作系統(tǒng)字符集為zh_CN.utf8的情況下

NLS_LANG參數(shù)的幾部分
export NLS_LANG=american_america.utf8
                              國家        區(qū)域     字符集
想顯示英文用:
AMERICAN_AMERICA.UTF8

想顯示中文用:
SIMPLIFIED CHINESE_CHINA.UTF8

字符集必須是使用UTF8與客戶端操作系統(tǒng)保持一致

論壇徽章:
7
天蝎座
日期:2013-08-16 23:19:32丑牛
日期:2014-01-08 09:20:14寅虎
日期:2014-01-11 11:03:44午馬
日期:2014-04-28 11:02:40天秤座
日期:2014-05-16 23:24:24摩羯座
日期:2014-07-20 10:46:04卯兔
日期:2014-08-08 15:21:41
2 [報告]
發(fā)表于 2013-11-22 20:50 |只看該作者
客戶端的字符集與服務器端的字符集必須一致,才能不會有亂碼。

論壇徽章:
59
2015七夕節(jié)徽章
日期:2015-08-24 11:17:25ChinaUnix專家徽章
日期:2015-07-20 09:19:30每周論壇發(fā)貼之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38榮譽版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年紀念徽章
日期:2015-07-20 11:05:27IT運維版塊每日發(fā)帖之星
日期:2015-07-20 11:05:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:36程序設計版塊每日發(fā)帖之星
日期:2015-07-20 11:05:40數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2015-07-20 11:05:432015年辭舊歲徽章
日期:2015-07-20 11:05:44
3 [報告]
發(fā)表于 2013-11-23 09:24 |只看該作者
字符集的問題在LINUX下一直比較煩人。

論壇徽章:
0
4 [報告]
發(fā)表于 2013-11-25 09:21 |只看該作者
一般OS的字符集都是UTF8的,而數(shù)據(jù)庫的就不一定了~這個想統(tǒng)一,不一定吧~
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP