欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
數據庫出現亂碼的原因和解決辦法
“在SQL*Plus中insert進(jìn)的都是中文的,為什么一存入服務(wù)器后,再select出的就是???”
“有的時(shí)候,服務(wù)器數據先導出,重裝服務(wù)器,再導入數據,結果,發(fā)生數據查詢(xún)成???”
… …
這些問(wèn)題,一般,是因為字符集設置不對照成的。
很久以來(lái),字符集一直是困擾著(zhù)眾多Oracle愛(ài)好者的問(wèn)題,筆者從事Oracle數據庫管理和應用已經(jīng)幾年了,經(jīng)常接到客戶(hù)的類(lèi)似上面提到的有關(guān)數據庫字符集的“告急”和“求救”,今天,就這個(gè)問(wèn)題打算做一些分析和探討。
首先,我們要明確什么是字符集?字符集是一個(gè)字節數據的解釋的符號集合,有大小之分,有相互的包括關(guān)系,如us7ascii就是zhs16gbk的子集,從us7ascii到zhs16gbk不會(huì )有數據解釋上的問(wèn)題,不會(huì )有數據丟失,oracle對這種問(wèn)題也要求從子集到超集的導出受支持,反之不行。在所有的字符集中utf8應該是最大,因為它基于unicode,雙字節保存字符(也因此在存儲空間上占用更多)。
其次,一旦數據庫創(chuàng )建后,數據庫的字符集是不能改變的。因此,在設計和安裝之初考慮使用哪一種字符集是十分重要的。數據庫字符集應該是操作系統本地字符集的一個(gè)超集。存取數據庫的客戶(hù)使用的字符集將決定選擇哪一個(gè)超集,即數據庫字符集應該是所有客戶(hù)字符集的超集。
在實(shí)際的應用中,和字符集問(wèn)題最相關(guān)的恐怕就是exp/imp了。在做exp/imp是,如果client 和server的nls_lang設置是一樣的,一般就沒(méi)有問(wèn)題。但是,要在兩個(gè)不同字符集的系統之間導數據就經(jīng)常會(huì )有這樣那樣的問(wèn)題,如,導出時(shí)數據庫的顯示正常,是中文,當導入到其他系統時(shí),就成了亂碼,這也是一類(lèi)常見(jiàn)問(wèn)題。對于這個(gè)問(wèn)題,有一個(gè)常用的轉換方法,首先用一個(gè)二進(jìn)制編輯器(如,UltraEdit)察看到出文件(DMP文件)的第二和第三字節,這兩個(gè)字節的內容是服務(wù)器端的字符集,比如0001,那么在數據庫中查找出它代表的字符集:
bepone> sqlplus internal
SQL> select nls_charset_name(to_number(‘0001‘,‘xxxx‘)) from dual;
NLS_CHARSET_NAME(TO_NUMBER(‘0001‘,‘XXXX‘)
----------------------------------------
US7ASCII
SQL>
然后,如果在導入數據時(shí)需要修改為ZHS16GBK,我們就需要知道如何修改這兩個(gè)字節才能讓他們和ZHS16GBK對應:
bepone> sqlplus internal
SQL> SQL> select to_char(nls_charset_id(‘ZHS16GBK‘), ‘xxxx‘) from dual;
TO_CH
-----
354
SQL>
因此,可以將這兩個(gè)字節手工修改為0354(不足4位時(shí)前面補0),然后就可以正常導入數據了。
現在,為了進(jìn)一步搞清楚字符集的秘密,介紹一些與字符集有關(guān)的NLS_LANG參數,
NLS_LANG格式:
NLS_LANG = language_territory.charset
有三個(gè)組成部分(語(yǔ)言、地域和字符集),每個(gè)組成成分控制了NLS子集的特性。其中:language 指定服務(wù)器消息的語(yǔ)言。
territory 指定服務(wù)器的日期和數字格式。
Charset 指定字符集
例如:
AMERICAN_AMERICA.US7SCII
AMERICAN _ AMERICA. ZHS16GBK
還有一些子集可以更明確定義NLS_LANG參數:
DICT.BASE                   數據字典基本表版本
DBTIMEZONE                  數據庫時(shí)區
NLS_LANGUAGE                語(yǔ)言
NLS_TERRITORY               地域
NLS_CURRENCY                本地貨幣字符
NLS_ISO_CURRENCY            ISO貨幣字符
NLS_NUMERIC_CHARACTERS      小數字符和組分隔開(kāi)
NLS_CHARACTERSET            字符集
NLS_CALENDAR                日歷系統
NLS_DATE_FORMAT             缺省的日期格式
NLS_DATE_LANGUAGE           缺省的日期語(yǔ)言
NLS_SORT                    字符排序序列
NLS_TIME_FORMAT             時(shí)間格式
NLS_TIMESTAMP_FORMAT        時(shí)間戳格式
。。。 。。。
通過(guò)props$動(dòng)態(tài)性能視圖,我們可以查看數據庫的字符集信息:
$> sqlplus internal
SQL> desc props$
Name     Type           Nullable Default Comments
-------- -------------- -------- ------- --------
NAME     VARCHAR2(30)
VALUE$   VARCHAR2(4000) Y
COMMENT$ VARCHAR2(4000) Y
SQL> set arraysize 1
SQL> col value$ format a40
SQL> select name,value$ from props$ where name=‘NLS_CHARACTERSET‘;
NAME                           VALUE$
------------------------------ ----------------------------------------
NLS_CHARACTERSET               ZHS16GBK
SQL> select * from sys.props$;
NAME                           VALUE$
------------------------- ----------------------------------
DICT.BASE                 2
DBTIMEZONE                0:00
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 TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT   DD-MON-RR HH.MI.SSXFF AM TZH:TZM
NLS_DUAL_CURRENCY         $
NLS_COMP                  BINARY
NLS_NCHAR_CHARACTERSET    ZHS16GBK
NLS_RDBMS_VERSION         8.1.6.0.0
NAME                      VALUE$
------------------------- ----------------------------------
GLOBAL_DB_NAME            SCPDB1
EXPORT_VIEWS_VERSION           8
22 rows selected
SQL>
從接過(guò)可以看出:
NLS_LANG = AMERICAN _ AMERICA. ZHS16GBK
雖然,數據庫的字符集是在create database的時(shí)候指定的,以后不允許改變,但在一個(gè)已經(jīng)建立好的數據庫上,我們可以通過(guò)修改SYS.PROPS$來(lái)修改主要是對應客戶(hù)端的顯示,與存儲無(wú)關(guān)。
如:
SQL> conn / as sysdba
Connected.
SQL> SQL> select * from sys.props$
2  WHERE NAME=‘NLS_LANGUAGE‘;
NAME                           VALUE$
------------------------------ ---------------------
NLS_LANGUAGE                   AMERICAN
SQL>
SQL> UPDATE sys.PROPS$ SET VALUE$=‘SIMPLIFIED CHINESE‘
2  WHERE NAME=‘NLS_LANGUAGE‘;
1 row updated
SQL>
SQL> select * from sys.props$
2  WHERE NAME=‘NLS_LANGUAGE‘;
NAME                           VALUE$
------------------------------ ---------------------
NLS_LANGUAGE                   SIMPLIFIED CHINESE
SQL>
通常我們常見(jiàn)問(wèn)題的原因,基本上可以分為三種:
1.     服務(wù)器指定字符集與客戶(hù)字符集不同,而與加載數據字符集一致。
解決方法:對于這種情況,只需要設置客戶(hù)端字符集與服務(wù)器端字符集一致就可以了,具體操作如下:
§         察看當前字符集:
SQL> select * from sys.props$
2  WHERE NAME=‘NLS_CHARACTERSET‘;
NAME                           VALUE$
------------------------------ ----------
NLS_CHARACTERSET               ZHS16GBK
SQL>
可以看出,現在服務(wù)器端ORACLE數據庫的字符集為‘ZHS16GBK‘
§         根據服務(wù)器的字符集在客戶(hù)端坐相應的配置或者安裝ORACLE的客戶(hù)端軟件時(shí)指定:
如過(guò)還沒(méi)安裝客戶(hù)端,那么在安裝客戶(hù)端時(shí),指定與服務(wù)器相吻合的字符集即可;如果已經(jīng)安裝好了客戶(hù)端,并且客戶(hù)端為 sql*net 2.0 以下版本,進(jìn)入Windows的系統目錄,編輯oracle.ini文件,用US7ASCII替換原字符集,重新啟動(dòng)計算機,設置生效;否則,如果,客戶(hù)端為 sql*net 2.0 以上版本,在WIN98 下 運 行REGEDIT,第一步選HKEY_LOCAL_MACHINE,第二步選擇SOFTWARE, 第三步選擇 ORACLE, 第四步選擇 NLS_LANG, 鍵 入 與服 務(wù) 器 端 相 同 的 字 符 集
(本例為:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG :AMERICAN _ AMERICA. ZHS16GBK)。
如過(guò)是UNIX客戶(hù)端,則:
SQL> conn / as sysdba
Connected.
SQL> SQL> UPDATE sys.PROPS$ SET VALUE$=‘SIMPLIFIED CHINESE‘
2  WHERE NAME=‘NLS_LANGUAGE‘;
1 row updated
SQL> COMMIT;
Commit complete
SQL>
2.     服務(wù)器指定字符集與客戶(hù)字符集相同,與加載數據字符集不一致。
解決方法:強制加載數據字符集與服務(wù)器端字符集一致。要做到這一點(diǎn),可以通過(guò)重新創(chuàng )建數據庫,并選擇與原卸出數據一致的字符集,然后IMP數據,這種情況僅僅適用于空庫和具有同一種字符集的數據。
解決這類(lèi)問(wèn)題,也可以先將數據加載到具有相同字符集的服務(wù)器上,然后用轉換工具卸出為foxbase 格式或access格式數據庫,再用轉換工具轉入到不同字符集的ORACLE數據庫中,這樣就避免了ORACLE字符集的困擾。目前數據庫格式轉換的工具很多,象power builder5.0以上版本提供的pipeline,Microsoft Access數據庫提供的數據導入/導出功能等。
3.     服務(wù)器指定字符集與客戶(hù)字符集不同,與輸入數據字符集不一致。
對于這種情況,目前為止的都還沒(méi)有太好的解決方法。
通過(guò)上面的了解,我們知道,導致在后期使用數據庫時(shí)出現種種關(guān)于字符記得問(wèn)題,多半是由于在數據庫設計、安裝指出沒(méi)有很好的考慮到以后的需要,所以,我們完全可以通過(guò)在服務(wù)器上和客戶(hù)端使用相同的字符集來(lái)避免有此類(lèi)問(wèn)題引出的麻煩。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ORACLE字符集問(wèn)題總結
深入分析Oracle字符集(轉載)
navicat連接oracle的錯誤:ora-12737:instant client l...
設置ORACLE客戶(hù)端字符集
字符集異常解決方案
【原創(chuàng )】Oracle管理專(zhuān)題之:Oracle9i 字符集與NLS
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久