溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在Oracle中IMP導(dǎo)入數(shù)據(jù)時(shí),如何解決目標(biāo)數(shù)據(jù)庫字符不一致問題

發(fā)布時(shí)間:2020-07-18 12:47:11 來源:網(wǎng)絡(luò) 閱讀:1947 作者:xiaocao13140 欄目:關(guān)系型數(shù)據(jù)庫

生產(chǎn)環(huán)境中經(jīng)常使用到Oracle的IMP導(dǎo)入和EXP導(dǎo)出來功能來達(dá)到數(shù)據(jù)遷移的目的,通常在源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫中查詢字符集是否致,

測試環(huán)境中導(dǎo)入IMP導(dǎo)入報(bào)錯(cuò)信息如下:

導(dǎo)入命令如下:

[oracle@localhost.localdomain:/soft]$imp scott/scott file=/soft/scott_v1.dmp log=/soft/scott_v1.log ignore=y full=y

Import: Release 11.2.0.4.0 - Production on Sun Oct 22 16:26:27 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


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

Export file created by EXPORT:V11.02.00 via conventional path
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set --提示字符集不一致
. importing SCOTT's objects into SCOTT
. . importing table                        "BONUS"          0 rows imported
. . importing table                         "DEPT"
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_DEPT) violated--提示各種亂碼問題
Column 1 10
Column 2 ǎ
Column 3
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_DEPT) violated
Column 1 20
Column 2 в
Column 3 ±±
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_DEPT) violated
Column 1 30
Column 2 к
Column 3
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_DEPT) violated
Column 1 40
Column 2
Column 3           0 rows imported
. . importing table                          "EMP"
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7369
Column 2 itpux01
Column 3 τ
Column 4 7902
Column 5 17-DEC-1980:00:00:00
Column 6 800
Column 7
Column 8 20
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7499
Column 2 itpux02
Column 3 к
Column 4 7698
Column 5 20-FEB-1981:00:00:00
Column 6 1600
Column 7 300
Column 8 30
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7521
Column 2 itpux03
Column 3 к
Column 4 7698
Column 5 22-FEB-1981:00:00:00
Column 6 1250
Column 7 500
Column 8 30
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7566
Column 2 itpux04
Column 3
Column 4 7839
Column 5 02-APR-1981:00:00:00
Column 6 2975
Column 7
Column 8 20
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7654
Column 2 itpux05
Column 3 к
Column 4 7698
Column 5 28-SEP-1981:00:00:00
Column 6 1250
Column 7 1400
Column 8 30
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7698
Column 2 itpux06
Column 3
Column 4 7839
Column 5 01-MAY-1981:00:00:00
Column 6 2850
Column 7
Column 8 30
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7782
Column 2 itpux07
Column 3
Column 4 7839
Column 5 09-JUN-1981:00:00:00
Column 6 2450
Column 7
Column 8 10
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7788
Column 2 itpux08
Column 3 ·
Column 4 7566
Column 5 19-APR-1987:00:00:00
Column 6 3000
Column 7
Column 8 20
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7839
Column 2 itpux09
Column 3
Column 4
Column 5 17-NOV-1981:00:00:00
Column 6 5000
Column 7
Column 8 10
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7844
Column 2 itpux10
Column 3 к
Column 4 7698
Column 5 08-SEP-1981:00:00:00
Column 6 1500
Column 7 0
Column 8 30
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7876
Column 2 itpux11
Column 3 τ
Column 4 7788
Column 5 23-MAY-1987:00:00:00
Column 6 1100
Column 7
Column 8 20
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7900
Column 2 itpux12
Column 3 τ
Column 4 7698
Column 5 03-DEC-1981:00:00:00
Column 6 950
Column 7
Column 8 30
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7902
Column 2 itpux13
Column 3 ·
Column 4 7566
Column 5 03-DEC-1981:00:00:00
Column 6 3000
Column 7
Column 8 20
IMP-00019: row rejected due to ORACLE error 1
IMP-00003: ORACLE error 1 encountered
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
Column 1 7934
Column 2 itpux14
Column 3 τ
Column 4 7782
Column 5 23-JAN-1982:00:00:00
Column 6 1300
Column 7
Column 8 10          0 rows imported
. . importing table                     "SALGRADE"          5 rows imported
About to enable constraints...
Import terminated successfully with warnings.




如何查詢字符集

方法1:查詢表(在知道源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫):

select * from nls_database_parameters;


1    NLS_LANGUAGE           AMERICAN
2    NLS_TERRITORY           AMERICA
3    NLS_CURRENCY           $
4    NLS_ISO_CURRENCY    AMERICA
5    NLS_NUMERIC_CHARACTERS    .,
6    NLS_CHARACTERSET    ZHS16GBK --此處是顯示字符集
7    NLS_CALENDAR    GREGORIAN
8    NLS_DATE_FORMAT    DD-MON-RR
9    NLS_DATE_LANGUAGE    AMERICAN
10    NLS_SORT    BINARY
11    NLS_TIME_FORMAT    HH.MI.SSXFF AM
12    NLS_TIMESTAMP_FORMAT    DD-MON-RR HH.MI.SSXFF AM
13    NLS_TIME_TZ_FORMAT    HH.MI.SSXFF AM TZR
14    NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZR
15    NLS_DUAL_CURRENCY    $
16    NLS_COMP    BINARY
17    NLS_LENGTH_SEMANTICS    BYTE
18    NLS_NCHAR_CONV_EXCP    FALSE
19    NLS_NCHAR_CHARACTERSET    AL16UTF16
20    NLS_RDBMS_VERSION    11.2.0.4.0

方法2:在不知道dmp中字符集是什么,如何查看

1  查看dmp文件的中字符集

cat '/home/soft/scott.dmp' |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

結(jié)果為:0345

2  然后用以下SQL查出它對(duì)應(yīng)的字符集:

SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX'
----------------------------------------
ZHS16GBK


如何修改字符集

修改字符集有幾種方法

方法1、修改服務(wù)器端中的環(huán)境變量中的字符集設(shè)置(服務(wù)器端導(dǎo)入只要配置服務(wù)器端,客戶端導(dǎo)入的話還要設(shè)置客戶端字符集),注:此方法在服務(wù)器修改后再及時(shí)修改回去

方法2、修改數(shù)據(jù)庫中字符集

方法3、修改dmp文件中字符集


本環(huán)境是在服務(wù)器端導(dǎo)入的,所以采用方法1

1、查詢當(dāng)前環(huán)境變量

[oracle@localhost.localdomain:/soft]$cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

# Oracle Settings oracle
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
PS1="[`whoami`@`hostname`:"'$PWD]$'
alias sqlplus="rlwrap sqlplus"
alias rman="rlwrap rman"
alias alert="cd /oracle/app/oracle/diag/rdbms/db01/db01/trace"
alias lsnrctl="rlwrap lsnrctl"
alias adrci="rlwrap adrci"
export LANG=en_US
ORACLE_BASE=/oracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0; export ORACLE_HOME
ORACLE_SID=db01; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM

PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG

if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
         ulimit -p 16384
              ulimit -n 65536
        else
              ulimit -u 16384 -n 65536
        fi
        umask 022
fi


2、配置環(huán)境變量
[oracle@localhost.localdomain:/soft]$vi ~/.bash_profile

3、查詢配置后信息

[oracle@localhost.localdomain:/soft]$cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

# Oracle Settings oracle
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
PS1="[`whoami`@`hostname`:"'$PWD]$'
alias sqlplus="rlwrap sqlplus"
alias rman="rlwrap rman"
alias alert="cd /oracle/app/oracle/diag/rdbms/db01/db01/trace"
alias lsnrctl="rlwrap lsnrctl"
alias adrci="rlwrap adrci"
export LANG=en_US
ORACLE_BASE=/oracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0; export ORACLE_HOME
ORACLE_SID=db01; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM

PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
#NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG
NLS_LANG=AMERICAN_AMERICA.AL16UTF16;export NLS_LANG

if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
         ulimit -p 16384
              ulimit -n 65536
        else
              ulimit -u 16384 -n 65536
        fi
        umask 022
fi

4、配置后可以通過SQL查詢修改后字符集是否變更

select * from nls_database_parameters;

5、再次重啟導(dǎo)入數(shù)據(jù)

[oracle@localhost.localdomain:/soft]$imp scott/scott file=/soft/scott_v1.dmp log=/soft/scott_v1.log1 ignore=y full=y

Import: Release 11.2.0.4.0 - Production on Sun Oct 22 16:46:17 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


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

Export file created by EXPORT:V11.02.00 via conventional path
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
. importing SCOTT's objects into SCOTT
. . importing table                        "BONUS"          0 rows imported
. . importing table                         "DEPT"          4 rows imported
. . importing table                          "EMP"         14 rows imported
. . importing table                     "SALGRADE"          5 rows imported
About to enable constraints...
Import terminated successfully without warnings.--此時(shí)導(dǎo)入比較成功,沒有報(bào)錯(cuò)了


知識(shí)延伸閱讀


測試的時(shí)候,本機(jī)oracle安裝采用了utf8字符集,而項(xiàng)目的要求是gbk字符集,為了防止以后有不同字符集數(shù)據(jù)信息導(dǎo)入導(dǎo)出的問題,整理以下文檔。
修改oracle字符集新裝了oracle,裝為AL32UTF8格式,無奈一個(gè)工程導(dǎo)出包是ZHS16GBK格式,想了想辦法轉(zhuǎn)換,以下是學(xué)習(xí)
一、什么是oracle字符集
  Oracle字符集是一個(gè)字節(jié)數(shù)據(jù)的解釋的符號(hào)集合,有大小之分,有相互的包容關(guān)系。ORACLE 支持國家語言的體系結(jié)構(gòu)允許你使用本地化語言來存儲(chǔ),處理,檢索數(shù)據(jù)。它使數(shù)據(jù)庫工具,錯(cuò)誤消息,排序次序,日期,時(shí)間,貨幣,數(shù)字,和日歷自動(dòng)適應(yīng)本地化語言和平臺(tái)。

  影響oracle數(shù)據(jù)庫字符集最重要的參數(shù)是NLS_LANG參數(shù)。它的格式如下:

  NLS_LANG = language_territory.charset

  它有三個(gè)組成部分(語言、地域和字符集),每個(gè)成分控制了NLS子集的特性。其中:

  Language 指定服務(wù)器消息的語言,territory 指定服務(wù)器的日期和數(shù)字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK

  從NLS_LANG的組成我們可以看出,真正影響數(shù)據(jù)庫字符集的其實(shí)是第三部分。所以兩個(gè)數(shù)據(jù)庫之間的字符集只要第三部分一樣就可以相互導(dǎo)入導(dǎo)出數(shù)據(jù),前面影響的只是提示信息是中文還是英文。

  二、如何查詢Oracle的字符集

  很多人都碰到過因?yàn)樽址煌箶?shù)據(jù)導(dǎo)入失敗的情況。這涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做數(shù)據(jù)導(dǎo)入的時(shí)候,需要這三個(gè)字符集都一致才能正確導(dǎo)入。開始—運(yùn)行—sqlplus,用戶名輸入:system as sysdba
密碼:XXXX

  1、查詢oracle server端的字符集

  有很多種方法可以查出oracle server端的字符集,比較直觀的查詢方法是以下這種:SQL>select userenv(‘language’) from dual;

  結(jié)果類似如下:AMERICAN _ AMERICA. ZHS16GBK (本機(jī)結(jié)果SIMPLIFIED CHINESE_CHINA.AL32UTF8)

  2、如何查詢dmp文件的字符集

  用oracle的exp工具導(dǎo)出的dmp文件也包含了字符集信息,dmp文件的第2和第3個(gè)字節(jié)記錄了dmp文件的字符集。如果dmp文件不大,比如只有幾M或幾十M,可以用UltraEdit打開(16進(jìn)制方式),看第2第3個(gè)字節(jié)的內(nèi)容,如0354,然后用以下SQL查出它對(duì)應(yīng)的字符集:

  SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;

  ZHS16GBK

  如果dmp文件很大,比如有2G以上(這也是最常見的情況),用文本編輯器打開很慢或者完全打不開,可以用以下命令(在unix主機(jī)上):

  cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

  然后用上述SQL也可以得到它對(duì)應(yīng)的字符集。

  3、查詢oracle client端的字符集

  這個(gè)比較簡單。在windows平臺(tái)下,就是注冊(cè)表里面HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG 。還可以在dos窗口里面自己設(shè)置,比如:

  set nls_lang=AMERICAN_AMERICA.ZHS16GBK

  這樣就只影響這個(gè)窗口里面的環(huán)境變量。

  在unix平臺(tái)下,就是環(huán)境變量NLS_LANG。

  $echo $NLS_LANG

  AMERICAN_AMERICA.ZHS16GBK

  如果檢查的結(jié)果發(fā)現(xiàn)server端與client端字符集不一致,請(qǐng)統(tǒng)一修改為同server端相同的字符集。

  三、修改oracle的字符集

  上文說過,oracle的字符集有互相的包容關(guān)系。如us7ascii就是zhs16gbk的子集,從us7ascii到zhs16gbk不會(huì)有數(shù)據(jù)解釋上的問題,不會(huì)有數(shù)據(jù)丟失。在所有的字符集中utf8應(yīng)該是最大,因?yàn)樗趗nicode,雙字節(jié)保存字符(也因此在存儲(chǔ)空間上占用更多)。

  一旦數(shù)據(jù)庫創(chuàng)建后,數(shù)據(jù)庫的字符集理論上講是不能改變的。因此,在設(shè)計(jì)和安裝之初考慮使用哪一種字符集十分重要。根據(jù)Oracle的官方說明,字符集的轉(zhuǎn)換是從子集到超集受支持,反之不行。如果兩種字符集之間根本沒有子集和超集的關(guān)系,那么字符集的轉(zhuǎn)換是不受oracle支持的。對(duì)數(shù)據(jù)庫server而言,錯(cuò)誤的修改字符集將會(huì)導(dǎo)致很多不可測的后果,可能會(huì)嚴(yán)重影響數(shù)據(jù)庫的正常運(yùn)行,所以在修改之前一定要確認(rèn)兩種字符集是否存在子集和超集的關(guān)系。一般來說,除非萬不得已,我們不建議修改oracle數(shù)據(jù)庫server端的字符集。特別說明,我們最常用的兩種字符集ZHS16GBK和ZHS16CGB231280之間不存在子集和超集關(guān)系,因此理論上講這兩種字符集之間的相互轉(zhuǎn)換不受支持。

  1、修改server端字符集(不建議使用)

  在oracle 8之前,可以用直接修改數(shù)據(jù)字典表props$來改變數(shù)據(jù)庫的字符集。但oracle8之后,至少有三張系統(tǒng)表記錄了數(shù)據(jù)庫字符集的信息,只改props$表并不完全,可能引起嚴(yán)重的后果。正確的修改方法如下:

  $sqlplus /nolog

  SQL>conn / as sysdba;

以上方法測試不行,用scott/tiger登陸sqlplus然后connect sys/sys as sysdba,然后輸入命令即可


  若此時(shí)數(shù)據(jù)庫服務(wù)器已啟動(dòng),則先執(zhí)行SHUTDOWN IMMEDIATE命令關(guān)閉數(shù)據(jù)庫服務(wù)器,然后執(zhí)行以下命令:

  SQL>STARTUP MOUNT;

  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

  SQL>ALTER DATABASE OPEN;

  SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳過超子集檢測

  SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

這一行不起作用,執(zhí)行后出錯(cuò)ORA-00933: SQL 命令未正確結(jié)束,不過執(zhí)行上一行命令已經(jīng)生效,其他文章里未提到本行。


  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

  2、修改dmp文件字符集

  上文說過,dmp文件的第2第3字節(jié)記錄了字符集信息,因此直接修改dmp文件的第2第3字節(jié)的內(nèi)容就可以‘騙’過oracle的檢查。這樣做理論上也僅是從子集到超集可以修改,但很多情況下在沒有子集和超集關(guān)系的情況下也可以修改,我們常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因?yàn)楦牡闹皇莇mp文件,所以影響不大。

  具體的修改方法比較多,最簡單的就是直接用UltraEdit修改dmp文件的第2和第3個(gè)字節(jié)。比如想將dmp文件的字符集改為ZHS16GBK,可以用以下SQL查出該種字符集對(duì)應(yīng)的16進(jìn)制代碼:

  SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;

  0354

  然后將dmp文件的2、3字節(jié)修改為0354即可。

  如果dmp文件很大,用ue無法打開,就需要用程序的方法了。網(wǎng)上有人用java存儲(chǔ)過程寫了轉(zhuǎn)換的程序(用java存儲(chǔ)過程的好處是通用性教好,缺點(diǎn)是比較麻煩)。我在windows下測試通過。但要求oracle數(shù)據(jù)庫一定要安裝JVM選項(xiàng)。有興趣的朋友可以研究一下程序代碼

      在注冊(cè)表中更改ORACLE的字符集編碼方式的操作:regedit
      注冊(cè)表路徑:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0
      把 NLS_LANG 的值從 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
      改為 AMERICAN_AMERICA.US7ASCII   american_america.we8dec



PS:
Oracle UTF8 編碼問題
其實(shí)這是一個(gè)老問題,處理過多次了,每次都沒有記住,這次決定寫下來了。 其實(shí)很簡單,
1)Oracle其實(shí)非常好,它會(huì)自動(dòng)處理編碼的轉(zhuǎn)換。
2)客戶端(輸入數(shù)據(jù)的機(jī)器)保證自結(jié)數(shù)據(jù)不出錯(cuò)就好了。
在這個(gè)基礎(chǔ)上,要用Oracle,并且用UTF8(多數(shù)情況下是為了應(yīng)付多語言)存儲(chǔ)數(shù)據(jù),只需要做兩件事情:
a)Oracle數(shù)據(jù)庫的實(shí)例的編碼設(shè)置為UTF8;(NLS_LANG=AMERICAN _ AMERICA.UTF8)
b)數(shù)據(jù)文件是什么編碼,就將客戶端設(shè)置為什么編碼(例如NLS_LANG=AMERICAN _ AMERICA.ZHS16GBK  在注冊(cè)表中修改),然后用工具導(dǎo)入數(shù)據(jù)。
就可以了--在Java程序中可以盡情使用UTF8來顯示中日韓等多國語言了

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI