新聞中心
在數(shù)據(jù)庫(kù)開(kāi)發(fā)和管理過(guò)程中,遇到亂碼問(wèn)題是很常見(jiàn)的。這些問(wèn)題可能是由于不正確的字符集設(shè)置、不支持的字符集、數(shù)據(jù)庫(kù)和應(yīng)用程序之間不兼容的字符集等原因所導(dǎo)致的。這些問(wèn)題可能會(huì)導(dǎo)致數(shù)據(jù)損壞、數(shù)據(jù)丟失等嚴(yán)重后果。因此,正確配置數(shù)據(jù)庫(kù)環(huán)境變量是解決亂碼問(wèn)題的關(guān)鍵。

一、了解數(shù)據(jù)庫(kù)環(huán)境變量
在開(kāi)始配置數(shù)據(jù)庫(kù)環(huán)境變量前,我們需要了解一些基本概念。環(huán)境變量是操作系統(tǒng)用來(lái)存儲(chǔ)一些系統(tǒng)信息和配置的變量。在數(shù)據(jù)庫(kù)開(kāi)發(fā)和管理中,通常需要配置一些數(shù)據(jù)庫(kù)環(huán)境變量,比如字符集、語(yǔ)言設(shè)置等。這些變量的值會(huì)影響數(shù)據(jù)庫(kù)的行為和應(yīng)用程序的行為。
二、正確配置字符集
字符集是解決亂碼問(wèn)題的最重要因素之一。在數(shù)據(jù)庫(kù)和應(yīng)用程序中,通常會(huì)使用不同的字符集。如果數(shù)據(jù)庫(kù)和應(yīng)用程序之間的字符集不兼容,就會(huì)出現(xiàn)亂碼問(wèn)題。因此,正確配置字符集是解決亂碼問(wèn)題的關(guān)鍵。
MySQL數(shù)據(jù)庫(kù)使用utf8字符集作為默認(rèn)字符集,而應(yīng)用程序可能使用其他字符集,比如gbk、utf-16等。在MySQL中,可以通過(guò)修改my.ini文件來(lái)配置字符集。如下:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
在應(yīng)用程序中,需要將連接字符串中的字符集設(shè)置為與數(shù)據(jù)庫(kù)相同的字符集。比如,如果MySQL中的字符集為utf8,應(yīng)用程序連接字符串應(yīng)該設(shè)置為:
server=127.0.0.1;uid=root;pwd=123456;database=test;charset=utf8;
三、配置語(yǔ)言設(shè)置
語(yǔ)言設(shè)置也是解決亂碼問(wèn)題的一個(gè)因素。在MySQL數(shù)據(jù)庫(kù)中,可以通過(guò)修改my.ini文件來(lái)配置語(yǔ)言設(shè)置。如下:
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
language=’中文’
在應(yīng)用程序中,需要將連接字符串中的語(yǔ)言設(shè)置為與數(shù)據(jù)庫(kù)相同的語(yǔ)言。比如,如果MySQL中的語(yǔ)言為中文,應(yīng)用程序連接字符串應(yīng)該設(shè)置為:
server=127.0.0.1;uid=root;pwd=123456;database=test;charset=utf8;language=中文;
四、避免使用不支持的字符集
在MySQL數(shù)據(jù)庫(kù)中,有一些字符集是不支持的。如果使用了不支持的字符集,就會(huì)出現(xiàn)亂碼問(wèn)題。因此,應(yīng)該避免使用不支持的字符集。如果確實(shí)需要使用不支持的字符集,可以通過(guò)修改my.ini文件來(lái)添加支持的字符集。如下:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect=’SET NAMES utf8′
init_connect=’SET collation_connection = utf8_general_ci’
skip-character-set-client-handshake
charset-server=utf8
collation-server=utf8_general_ci
character-set-client-handshake=false
character-set-server=utf8
collation-server=utf8_general_ci
五、
在數(shù)據(jù)庫(kù)開(kāi)發(fā)和管理過(guò)程中,遇到亂碼問(wèn)題是很常見(jiàn)的。正確配置數(shù)據(jù)庫(kù)環(huán)境變量是解決亂碼問(wèn)題的關(guān)鍵。正確配置字符集、語(yǔ)言設(shè)置以及避免使用不支持的字符集都是解決亂碼問(wèn)題的關(guān)鍵因素。通過(guò)以上的配置,我們可以避免亂碼問(wèn)題,保證數(shù)據(jù)的準(zhǔn)確性和完整性。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
oracle 亂碼 如何解決
1、對(duì)于Oracle Enterprise Manager中的所有工具,有一個(gè)
配置文件
名為dbappscfg.properties,修改該文件即可解決上述問(wèn)題。這個(gè)文件的位置在$ORACLE_HOME\syan\config目錄下,用任何的
文本編輯器
打開(kāi)該文件,在這個(gè)文件里面,找到這樣一項(xiàng),
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
2、去掉注釋符#,同時(shí)將其修改為
SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
3、對(duì)于Windows操作系統(tǒng),還需要修改一項(xiàng),在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注釋符,將其修改為你所在機(jī)器的操作系統(tǒng)主目錄。如操作系統(tǒng)的主目錄在D盤(pán)的Winnt下,則將其修改為
SQLPLUS_SYSTEMROOT=d:\\WINNT。
對(duì)于后面一項(xiàng)的修改只對(duì)Windows操作系統(tǒng)進(jìn)行,對(duì)
UNIX操作系統(tǒng)
則不需要。如果在Windows操作系統(tǒng)中不修改該項(xiàng),在Oracle Enterprise Manager中,連接系統(tǒng)時(shí),會(huì)提示如下的錯(cuò)誤:
ORATNS:protocol adapter error
或者
ORAConnect failed because target host or object does not exist
4、修改完成后,保存文件,退出編輯。重新連接SQL PLUS Worksheet,
字符集
亂碼問(wèn)題得到解決,顯示正確的簡(jiǎn)體中文字符集。
問(wèn)題: 使用Oracle Instant Client 出現(xiàn) ORA-12705: Cannot access NLS data files or invalid environment specified 錯(cuò)誤。
如果是Windows平臺(tái),注冊(cè)表里 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 查找鍵 NLS_LANG,這個(gè)鍵由Oracle標(biāo)準(zhǔn)客戶端安裝創(chuàng)建, 值是 NA 。這個(gè)導(dǎo)致了 ORA-12705錯(cuò)誤。解決方法就是改名 NLS_LANG。
Linux下 如果
環(huán)境變量
NLS_LANG 值是NA 會(huì)引起 ORA錯(cuò)誤,解決方法是刪除這個(gè)變量
unset NLS_LANG
這些問(wèn)題,一般是因?yàn)樽址O(shè)置不對(duì)造成的。
很久以來(lái),字符集一直是困擾著眾多Oracle愛(ài)好者的問(wèn)題,筆者從事Oracle數(shù)據(jù)庫(kù)管理和應(yīng)用已經(jīng)幾年了,經(jīng)常接到客戶的類似上面提到的有關(guān)數(shù)據(jù)庫(kù)字符集的“告急”和“求救”,在此我們就這個(gè)問(wèn)題做一些分析和探討。
首先,我們要明確什么是字符集?字符集是一個(gè)字節(jié)數(shù)據(jù)的解釋的符號(hào),有大小之分,有相互的包括關(guān)系,如us7ascii就是zhs16gbk的子集, 從us7ascii到zhs16gbk不會(huì)有數(shù)據(jù)解釋上的問(wèn)題,不會(huì)有數(shù)據(jù)丟失,Oracle對(duì)這種問(wèn)題也要求從子集到超集的導(dǎo)出受支持,反之不行。在所有的字符集中utf8應(yīng)該是更大,因?yàn)樗趗nicode,雙字節(jié)保存字符(也因此在存儲(chǔ)空間上占用更多)。
其次,一旦數(shù)據(jù)庫(kù)創(chuàng)建后,數(shù)據(jù)庫(kù)的字符集是不能改變的。因此,在設(shè)計(jì)和安裝之初考慮使用哪一種字符集是十分重要的。數(shù)據(jù)庫(kù)字符集應(yīng)該是操作系統(tǒng)本地字符集的一個(gè)超集。存取數(shù)據(jù)庫(kù)的客戶使用的字符集將決定選擇哪一個(gè)超集,即數(shù)據(jù)庫(kù)字符集應(yīng)該是所有客戶字符集的超集。
在實(shí)際應(yīng)用中,和字符集問(wèn)題關(guān)系更大的恐怕就是exp/imp了。在做exp/imp時(shí),如果Client 和Server的nls_lang設(shè)置是一樣的,一般就沒(méi)有問(wèn)題的。但是,要在兩個(gè)不同字符集的系統(tǒng)之間導(dǎo)數(shù)據(jù)就經(jīng)常會(huì)有這樣或那樣的問(wèn)題,如,導(dǎo)出時(shí)數(shù)據(jù)庫(kù)的顯示正常,是中文,當(dāng)導(dǎo)入到其他系統(tǒng)時(shí),就成了亂碼,這也是一類常見(jiàn)問(wèn)題。
你把你插入的SQL語(yǔ)句顯示出來(lái)看,看下是不是亂碼,一般情況下oracle不會(huì)發(fā)生亂碼,很有可能是程序出來(lái)問(wèn)題,
select出來(lái)的都是亂碼的,據(jù)說(shuō)是字符集的問(wèn)題,我沒(méi)整明白怎么改
cmd命令連接oracle數(shù)據(jù)庫(kù)連接到三個(gè)字為什么是亂碼
cmd命令窗口字符編碼不一致或不兼容。
1、查一下服務(wù)器端的字符集。
2、把客戶端的字符集喚者設(shè)置為一致虛空的。
3、你要用sqlplus的話,先通過(guò)設(shè)置環(huán)境變差鏈瞎量來(lái)定義客戶端的字符集。
asp.net下用C#編的網(wǎng)站在讀取oracle數(shù)據(jù)庫(kù)時(shí)中文為亂碼
你自己看看吧
SQL Plus WorkSheet是一個(gè)窗口圖形界面的SQL語(yǔ)句編輯器,對(duì)于那些喜歡窗口界面而不喜歡字符界面的用戶,該工具相對(duì)SQL/PLUS受到了很大的歡迎。但從Oracle 8i以后,如果安裝Oracle 8i時(shí)選取的是別于英語(yǔ)的字符集,對(duì)于我們中國(guó),通常會(huì)選取簡(jiǎn)體中文字符集(ZHS16GBK),安裝成功后,運(yùn)行SQL Plus WorkSheet程序,會(huì)出現(xiàn)所有的中文顯示以及查詢結(jié)果均為亂碼的情況。
二、問(wèn)題分析
最初出現(xiàn)該問(wèn)題,首先懷疑就是安裝時(shí)字符集設(shè)置有問(wèn)題,也就是說(shuō)沒(méi)有設(shè)置正確的簡(jiǎn)體中文字符集。首先檢查數(shù)據(jù)庫(kù)字符集,在SQL/PLUS中,運(yùn)行下面的SQL語(yǔ)句,檢查所連接數(shù)據(jù)庫(kù)的字符集:
SQL> select userenv(‘language’) from dual;
USERENV(‘LANGUAGE’)
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
查詢結(jié)果發(fā)現(xiàn)數(shù)據(jù)庫(kù)安裝時(shí)所選字符集為簡(jiǎn)體中文ZHS16GBK,說(shuō)明安裝時(shí)字符集設(shè)置完全正確。第二步開(kāi)始懷疑是用戶客戶端字符集問(wèn)題,檢查客戶端注冊(cè)表,打開(kāi)注冊(cè)表編輯程序(RegEdit),在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG,發(fā)現(xiàn)Oracle客戶端字符集為AMERICAN_AMERICA.ZHS16GBK,設(shè)置也完全正確,可以排除是客戶端字符集設(shè)置錯(cuò)誤的問(wèn)題。同時(shí)還有一個(gè)現(xiàn)象就是在同一個(gè)客戶端機(jī)器上SQL/PLUS中的查詢字符集顯示完全正常,這也說(shuō)明不是字符集設(shè)置問(wèn)題,而是系統(tǒng)程序SQL/Plus Worksheet的問(wèn)題晌正伍。
在Oracle 8i以前的版本中,從來(lái)沒(méi)有出清蔽現(xiàn)過(guò)這樣的情況,這應(yīng)該和Oracle版本有關(guān),我們知道Oracle 8i和它前面的版本一個(gè)顯著的區(qū)別就是大部分的Oracle系統(tǒng)程序,現(xiàn)在均采用Java驅(qū)動(dòng),其實(shí)這也就是產(chǎn)生字符集亂碼問(wèn)題的根本所在。非Java驅(qū)動(dòng)的程序,如SQL*Plus,有一個(gè)系統(tǒng)參數(shù)NLS_LANG,該參數(shù)在UNIX系統(tǒng)中設(shè)置在環(huán)境變量中,在Windows操作系統(tǒng)中設(shè)置在注冊(cè)表中,這個(gè)參數(shù)決定了客戶端應(yīng)用程序的字宴或符集。而對(duì)于基于Java應(yīng)用的程序,如現(xiàn)在遇到的SQL*PLus Worksheet,NLS_LANG參數(shù)對(duì)這類程序是不起任何作用的。
三、解決方案
找到了問(wèn)題產(chǎn)生的原因后,下面來(lái)討論如何解決該問(wèn)題。對(duì)于Oracle Enterprise Manager中的所有工具,有一個(gè)配置文件名為dbappscfg.properties,修改該文件即可解決上述問(wèn)題。這個(gè)文件的位置在$ORACLE_HOME/syan/config目錄下,用任何的文本編輯器打開(kāi)該文件,在這個(gè)文件里面,找到這樣一項(xiàng),
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
去掉注釋符#,同時(shí)將其修改為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
對(duì)于Windows操作系統(tǒng),還需要修改一項(xiàng),在文件中找到# SQLPLUS_SYSTEMROOT= SQLPLUS_SYSTEMROOT=
對(duì)于后面一項(xiàng)的修改只對(duì)Windows操作系統(tǒng)進(jìn)行,對(duì)UNIX操作系統(tǒng)則不需要。如果在Windows操作系統(tǒng)中不修改該項(xiàng),在Oracle Enterprise Manager中,連接系統(tǒng)時(shí),會(huì)提示如下的錯(cuò)誤:
ORATNS:protocol adapter error
或者
ORAConnect failed because target host or object does not exist
修改完成后,保存文件,退出編輯。重新連接SQL PLUS Worksheet,字符集亂碼問(wèn)題得到解決,顯示正確的簡(jiǎn)體中文字符集。
數(shù)據(jù)庫(kù)亂碼環(huán)境變量配置的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù)亂碼環(huán)境變量配置,如何正確配置數(shù)據(jù)庫(kù)環(huán)境變量避免亂碼問(wèn)題,oracle 亂碼 如何解決,cmd命令連接oracle數(shù)據(jù)庫(kù)連接到三個(gè)字為什么是亂碼,asp.net下用C#編的網(wǎng)站在讀取oracle數(shù)據(jù)庫(kù)時(shí)中文為亂碼的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。
分享題目:如何正確配置數(shù)據(jù)庫(kù)環(huán)境變量避免亂碼問(wèn)題(數(shù)據(jù)庫(kù)亂碼環(huán)境變量配置)
本文URL:http://m.fisionsoft.com.cn/article/dppodsh.html


咨詢
建站咨詢
