【字符集】處理Toad顯示亂碼及Windows XP下無法插入“某些漢字”問題
在資料庫伺服器字符集為AL32UTF8,我們來思考並處理一下Windows XP環境下的Toad工具顯示字元為亂碼的問題。
1.鑑於《【字符集】“客戶終端字符集”、“NLS_LANG”環境變數以及“資料庫字符集”》http://space.itpub.net/519536/viewspace-615345提到的“Toad同學”顯示不穩定的現象,這裡給出一個處理方法。
2.先列一下上面文章中得到的幾個結論:
1)如果有可能,儘量保證客戶端編碼(Windows XP的cmd工具可以使用chcp命令來確認)、NLS_LANG引數和資料庫字符集這三個內容一致,這樣設定,無論是從效能上,還是從防止編碼轉換上都是最佳的;
2)如果目的是支援中文,資料庫Server端的字符集應該儘量選擇ZHS16GBK或AL32UTF8字符集,這樣可以減少因不當的“轉碼”導致的字元亂碼故障;
3)(推薦)可已將NLS_LANG引數與操作終端字元編碼一致,這樣可以保證資料庫能正確獲得應用終端使用的編碼,這時會發生“編碼轉換”,但是,這樣就可以保證正確轉碼,可以防止錯誤的編碼存入資料庫;
4)(不推薦)也可以將NLS_LANG引數與資料庫伺服器端的編碼一致,這樣,客戶端無論是傳送到伺服器端還是從伺服器接收資料都不會“轉碼”,這樣能保證客戶端對字元的顯示效果,但是,一定要小心,這時資料庫伺服器上存放的字元編碼很可能是錯誤的。
5)PL/SQL Developer工具在AL32UTF8字符集下貌似可以保證資料效果,但是“Toad同學”貌似不太“穩定”。
3.如果您仔細探究一下,亂碼的成因很單純:“亂碼”來自於“轉碼”!
4.因為Windows XP系統的字符集是936,也就是中文字符集GBK,這個字符集在Oracle中對應的就是ZHS16GBK,鑑於上面提到的結論“2)”和結論“3)”,所以就有了這個所謂的“折中式”處理方法:將Windows XP登錄檔中的NLS_LANG引數修改為AMERICAN_AMERICA.ZHS16GBK,以便保證與Windows XP這個操作終端的字符集一致。這樣,在每次存取資料的時候都會發生轉碼,目的是在資料庫Server端不會存入錯誤的編碼。請參考下面的確認和修改方法。
1)Windows XP字符集確認方法:
C:>chcp
Active code page: 936
內碼表936就是中文字符集GBK,可以參考msdn的資料《Windows Codepage 936》
http://www.microsoft.com/globaldev/reference/dbcs/936.htm
2)Windows XP環境Oracle的NLS_LANG引數修改流程:
Windows鍵+R進入到Run對話方塊,輸入“regedit”進入到登錄檔
導航:HKEY_LOCAL_MACHINE --> SOFTWARE --> ORACLE --> KEY_OraDb_home1
右側找到NLS_LANG引數,修改為AMERICAN_AMERICA.ZHS16GBK。如果沒有這個引數,請自行建立。
5.這樣修改後,還帶了了一個副作用(是“副作用”,不是“負作用”,意為另外一個好的結果):
在修改NLS_LANG為AMERICAN_AMERICA.ZHS16GBK之前,該引數為AMERICAN_AMERICA.AL32UTF8,是與資料庫Server端保持一致的,雖然這樣設定不會發生轉碼的現象,但是在Windows的cmd環境下會出現“一些漢字”(大部分可以)漢字無法錄入的問題,現象如下:
C:>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Sep 23 10:57:21 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
> drop table t purge;
Table dropped.
> create table t (x varchar2(10 char));
Table created.
> insert into t values ('侯');
ERROR:
ORA-01756: quoted string not properly terminated
這只是一個影響,另外一個著名的影響就是加中文comments的時候也報這樣的錯誤
> comment on table t is '侯';
ERROR:
ORA-01756: quoted string not properly terminated
OK,問題現象描述清楚了,下面我們修改NLS_LANG引數為AMERICAN_AMERICA.ZHS16GBK,也就是保持和XP系統的字符集一致。
注意:需要重新進入以下SQLPLUS環境
C:>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Sep 23 11:05:07 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
> insert into t values ('侯');
1 row created.
> comment on table t is '侯';
Comment created.
> col DUMP(X) for a30
> select x,dump(x) from t;
X DUMP(X)
-------------------- ------------------------------
侯 Typ=1 Len=3: 228,190,175
效果非常的明顯吧,dump後的結果也很清楚的表名,“侯”這個字已經被“轉碼”到AL32UTF8格式的了。
6.小結
透過這個實驗我們妥善處理了兩個實際問題,如果您沒有遇到過,恭喜您,您很幸運。
1)Toad顯示字元亂碼問題
2)Windows XP環境或Toad環境下無法插入“某些漢字”和comments的問題
Good luck.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1724534/viewspace-1054674/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLSQL中漢字顯示亂碼問題SQL
- 字元顯示亂碼問題處理辦法字元
- 漢字處理問題?
- Windows 下處理資料庫無法啟動問題Windows資料庫
- secureCRT顯示亂碼問題Securecrt
- 【SQL*Plus】處理 SQL*Plus的標頭無法顯示問題SQL
- toad 中文顯示亂碼解決方法
- Oracle客戶端toad漢字亂碼解決方法Oracle客戶端
- 請文在EJB2.0下處理漢字問題
- Windows xp下,貼上選單灰色顯示的處理(使用xcopy命令)Windows
- ubuntu 中文顯示亂碼問題Ubuntu
- PHP顯示MySQL亂碼問題PHPMySql
- Mysql輸出中文顯示亂碼處理MySql
- plsql顯示韓文亂碼的處理方法SQL
- HPUX下,解決xmanager的顯示亂碼問題UX
- toad顯示explain plan的問題AI
- 解決windows8無法全屏顯示的問題Windows
- Windows pyinstaller wxPython pyecharts無法正常顯示問題WindowsPythonEcharts
- Navicat for mysql 顯示中文亂碼問題MySql
- MySQL:亂碼問題處理流程MySql
- java處理中文亂碼問題Java
- JFreechart 在linux下不顯示及中文亂碼問題Linux
- 解決在PUTTY下Linux顯示亂碼的問題Linux
- 設定spacevim字型顯示亂碼問題
- 解決CentOS 中顯示亂碼問題CentOS
- linux 字符集 頁面顯示亂碼Linux
- xshell終端顯示亂碼的處理方法
- mac php 圖片驗證碼無法顯示問題MacPHP
- Windows無法顯示隱藏資料夾之問題解決Windows
- Oracle - SQLPlus中文顯示亂碼問題OracleSQL
- 插入資料庫亂碼問題資料庫
- POWERBUILDER KODIGO 框架TOOLBAR不能完全顯示漢字問題解決UIGo框架
- linux字元介面下的亂碼問題---改稱英文顯示Linux字元
- Java.nio-隨機讀寫解決漢字亂碼問題Java隨機
- IDEA Activiti Designer外掛---actiBPM漢字亂碼問題Idea
- Linux掛載windows下的cdrom亂碼處理LinuxWindows
- xp系統下載中文件出現無法顯示怎麼辦?
- CAD 有些字型無法顯示的問題