欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle如何改字符集,Oracle字符集修改

如何更改Oracle字符集

轉(zhuǎn)載自寒思國內(nèi)最常用的Oracle字符集ZHS16GBK(GBK

創(chuàng)新互聯(lián)專注于納溪網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供納溪營銷型網(wǎng)站建設(shè),納溪網(wǎng)站制作、納溪網(wǎng)頁設(shè)計、納溪網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造納溪網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供納溪網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

16-bit

Simplified

Chinese)能夠支持繁體中文,并且按照2個字符長度存儲一個漢字。UTF8字符集是多字節(jié)存儲,1個漢字(簡體、繁體)有時采用3個字符長度存儲。

Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是說UTF8是ZHS16GBK的嚴格超集。

對于子集到超集的轉(zhuǎn)換,Oracle是允許的,但是對于超集到子集的轉(zhuǎn)換是不允許的。一般對于超集到子集的轉(zhuǎn)換,建議是通過dbca刪除原來的數(shù)據(jù)庫,重新再建庫,選擇正確的字符集,然后導入備份。

我的方案是:先備份數(shù)據(jù),然后強制轉(zhuǎn)換字符集從UTF8到ZHS16GBK,然后導入備份數(shù)據(jù)。如果不行,才來重新建庫,設(shè)置字符集ZHS16GBK,導入備份數(shù)據(jù)。如果這還不行,就把更改字符集從ZHS16GBK到UTF8(這是安全的),再導入備份數(shù)據(jù),恢復到原始狀況。這樣就有可能避開重新建庫的麻煩。

1.

備份數(shù)據(jù)庫中所有用戶的數(shù)據(jù)

以oracle用戶登陸,執(zhí)行以下命令

#

export

NLS_LANG

=

“SIMPLIFIED

CHINESE_CHINA.UTF8”

保持與數(shù)據(jù)庫服務(wù)器端一致,這樣在exp導出時,就不會存在字符的轉(zhuǎn)換了,備份最原始的數(shù)據(jù)。

2.

評估UTF8轉(zhuǎn)換成ZHS16GBK的風險

轉(zhuǎn)換之前,要使用Oracle的csscan工具對數(shù)據(jù)庫掃描,評估字符集轉(zhuǎn)換前后,數(shù)據(jù)有可能的損壞情況。如果評估情況糟糕,那就絕對要放棄了。

先安裝屬于

CSMIG

用戶的一套表和過程。以oracle用戶登陸UNIX,

#sqlplus

“/

as

sysdab”

SQL@$ORACLE_HOME/

rdbms/admin/csminst.sql

SQLexit

#

$ORACLE_HOME\bin\csscan

-help

可以更清楚如何使用csscan。

#

$ORACLE_HOME/bin/csscan

system/sunday

user=mmsc

FROMCHAR=UTF8

TOCHAR=ZHS16GBK

ARRAY=102400

PROCESS=3

csscan.log

以上命令意思是掃描用戶:mmsc中的所有數(shù)據(jù),從字符集UTF8更改為ZHS16GBK的轉(zhuǎn)換情況。然后得到三個文件:scan.txt、scan.out、scan.err。

查看scan.out,scan.err,可以看出mmsc用戶下的所有的數(shù)據(jù)都是可以轉(zhuǎn)換的,并且沒有出現(xiàn)轉(zhuǎn)換“Exceptional”的情況,因此可以更放心一點。

3.

更改數(shù)據(jù)庫的字符集為ZHS16GBK

前面說過,通過命令“Alter

Database

Characeter

Set

XXXX”,實現(xiàn)從超集到子集的轉(zhuǎn)換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:

Alter

Database

Character

Set

INTERNAL_CONVERT/

INTERNAL_USE

XXXX

這是Oracle的非公開命令。“在使用這個命令時,Oracle會跳過所有子集及超集的檢查,在任意字符集之間進行強制轉(zhuǎn)換,所以,使用這個命令時你必須十分小心,你必須清楚這一操作會帶來的風險”。

以oracle用戶登陸UNIX,

#sqlplus

“/

as

sysdba”

SQL

SHUTDOWN

IMMEDIATE;

SQL

STARTUP

MOUNT;

SQL

ALTER

SESSION

SET

SQL_TRACE=TRUE;

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

ZHS16GBK;

//如果不使用“INTERNAL_USE”參數(shù),系統(tǒng)會提示出錯:

//ERROR

at

line

1:

//ORA-12712:

new

character

set

must

be

a

superset

of

old

character

set

SQL

ALTER

SESSION

SET

SQL_TRACE=FALSE;

SQL

SHUTDOWN

IMMEDIATE;

SQL

STARTUP;

此時,檢查一下數(shù)據(jù)庫的字符集是否更改過來

SQL

select

value$

from

props$

where

name=’NLS_CHARACTERSET’;

VALUE$

-----------------

ZHS16GBK

緊接著檢查一下數(shù)據(jù)庫中簡體中文、繁體中文是否正常,不會出現(xiàn)亂碼。

SQLselect

spid,spname,spshortname

from

spinfovisual_hk

…...

非常不幸,我看到了一堆亂碼,這也證明了Oracle不支持字符集從超集到子集的更改,當時心里很緊張,很怕失敗,從而恢復到原樣。

但是根據(jù)以前的驗證,把UTF8下的備份導入到ZHS16GBK中去,是OK的,所以繼續(xù)嘗試。

4.

導入備份的用戶數(shù)據(jù)

還是以oracle用戶登陸UNIX,

先刪除庫中的用戶mmsc:

#sqlplus

“/

as

sysdba”

SQLdrop

user

mmsc

cascade;

SQLexit

再運行createuser.sql,生成mmsc用戶。

然后使用原來的備份文件,導入到mmsc用戶中:

注意:先設(shè)置NLS_LANG要與當前數(shù)據(jù)庫的一致:ZHS16GBK。這樣,導出時用戶會話的NLS_LANG為UTF8,與原先的數(shù)據(jù)庫字符集一致;現(xiàn)在為ZHS16GBK,與此時的數(shù)據(jù)庫字符集一致。這樣,導入時,就會進行字符轉(zhuǎn)換。

#

export

NLS_LANG

=

“SIMPLIFIED

CHINESE_CHINA.ZHS16GBK”

#imp

mmsc/mmsc@mdspdb

file=DSMPD113_user_mmsc.dmp

ignore=y

fromuser=mmsc

touser=mmsc

馬上查看數(shù)據(jù)庫中簡體、繁體中文,哈哈,沒有亂碼了,一切顯示正常。

緊接著進行驗證,也證明了:1個漢字此時只占用2個字符長度。問題解決了!

如何修改Oracle數(shù)據(jù)庫字符集

1、改客戶端字符集:通過WINDOWS的運行菜單運行Regedit,修改注冊表

Start - Run - Rededit -|

Under registry Editor - HKEY_LOCAL_MACHINE - SOFTWARE -ORACLE-KEY_XE-RIGHT WINDOW DOUBLE CLICK NLS_LANG - CHANGE VALUE TO "AMERICAN_AMERICA.UTF8" -OK -CLOSE REGISTRY

正確設(shè)置ORACLE客戶端字符集的方法:

oracle客戶端字符集設(shè)置需要和服務(wù)器端一致,否則會出現(xiàn)亂碼問題。

首先連接服務(wù)器,查詢服務(wù)器端設(shè)置:

select * from v$nls_parameters;

找到:

NLS_LANGUAGE

NLS_TERRITORY

NLS_CHARACTERSET

環(huán)境變量nls_lang便是由這三部分組成

NLS_LANG = language_territory.charset

比如:

NLS_LANG = American_Japan.JA16SJIS

2、改服務(wù)器端字符集,通過ORACLE的SQL PLUS命令窗口改

在SQL*PLUS 中,以DBA登錄

conn 用戶名 as sysdba

然后執(zhí)行以下命令

shutdown immediate; (把database停了)

startup mount; (把database重開去可更改情況)

alter system enable restricted session;

alter system set job_queue_processes=0;

alter system set aq_tm_processes=0;

alter database open;

alter database character set utf8;

OR

alter database character set internal_use utf8;

shutdown immediate;

startup; (重開正常oracle)

ORACLE數(shù)據(jù)庫字符集修改完成!

如何查看和修改Oracle數(shù)據(jù)庫服務(wù)器端的字符集?

A、oracle server 端字符集查詢

select userenv('language') from dual

其中NLS_CHARACTERSET 為server端字符集

NLS_LANGUAGE 為 server端字符顯示形式

B、查詢oracle client端的字符集

$echo $NLS_LANG

如果發(fā)現(xiàn)你select 出來的數(shù)據(jù)是亂碼,請把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫中的數(shù)據(jù)存在問題,或者是oracle服務(wù)端的配置存在問題。

C、server端字符集修改

將數(shù)據(jù)庫啟動到RESTRICTED模式下做字符集更改:

SQL conn /as sysdba ?Connected.

SQL shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

如果發(fā)現(xiàn)你select 出來的數(shù)據(jù)是亂碼,請把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫中的數(shù)據(jù)存在問題,或者是oracle服務(wù)端的配置存在問題。

.?1.oracle server端字符集查詢? ? ? ? 復制代碼代碼如下:? ? select userenv('language') from dual;? ? server字符集修改:? ? 將數(shù)據(jù)庫啟動到RESTRICTED模式下做字符集更改:??

oracle10g服務(wù)器端是安裝在AIX 6.0系統(tǒng)上,客戶端是安裝在windows server 2008 系統(tǒng)上,客戶端與服務(wù)器已成功連接,但是數(shù)據(jù)庫表里的中文字無法顯示,顯示為“?”,用SQLPLUS查得服務(wù)器端的字符集為AL16uTF16,如何修改該字符集使之支持中文呢?另外oracle10G客戶端的字符集需不需要設(shè)置,如何查看和設(shè)置呢?

網(wǎng)頁標題:oracle如何改字符集,Oracle字符集修改
標題路徑:http://chinadenli.net/article43/dsgojes.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊標簽優(yōu)化軟件開發(fā)網(wǎng)站制作網(wǎng)站改版網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)