日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【字符集UTF8】处理Toad显示乱码及Windows XP下无法插入“某些汉字”问题

發(fā)布時間:2024/8/26 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【字符集UTF8】处理Toad显示乱码及Windows XP下无法插入“某些汉字”问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據庫服務器字符集為AL32UTF8,我們來思考并處理一下Windows XP環(huán)境下的Toad工具顯示字符為亂碼的問題。

1.鑒于《【字符集】“客戶終端字符集”、“NLS_LANG”環(huán)境變量以及“數據庫字符集”》
http://space.itpub.net/519536/viewspace-615345 提到的“Toad同學”顯示不穩(wěn)定的現象,這里給出一個處理方法。

2.先列一下上面文章中得到的幾個結論:
1)如果有可能,盡量保證客戶端編碼(Windows XP的cmd工具可以使用chcp命令來確認)、NLS_LANG參數和數據庫字符集這三個內容一致,這樣設置,無論是從性能上,還是從防止編碼轉換上都是最佳的;
2)如果目的是支持中文,數據庫Server端的字符集應該盡量選擇ZHS16GBK或AL32UTF8字符集,這樣可以減少因不當的“轉碼”導致的字符亂碼故障;
3)(推薦)可已將NLS_LANG參數與操作終端字符編碼一致,這樣可以保證數據庫能正確獲得應用終端使用的編碼,這時會發(fā)生“編碼轉換”,但是,這樣就可以保證正確轉碼,可以防止錯誤的編碼存入數據庫;
4)(不推薦)也可以將NLS_LANG參數與數據庫服務器端的編碼一致,這樣,客戶端無論是發(fā)送到服務器端還是從服務器接收數據都不會“轉碼”,這樣能保證客戶端對字符的顯示效果,但是,一定要小心,這時數據庫服務器上存放的字符編碼很可能是錯誤的。
5)PL/SQL Developer工具在AL32UTF8字符集下貌似可以保證數據效果,但是“Toad同學”貌似不太“穩(wěn)定”。

3.如果您仔細探究一下,亂碼的成因很單純:“亂碼”來自于“轉碼”!

4.因為Windows XP系統的字符集是936,也就是中文字符集GBK,這個字符集在Oracle中對應的就是ZHS16GBK,鑒于上面提到的結論“2)”和結論“3)”,所以就有了這個所謂的“折中式”處理方法:將Windows XP注冊表中的NLS_LANG參數修改為AMERICAN_AMERICA.ZHS16GBK,以便保證與Windows XP這個操作終端的字符集一致。這樣,在每次存取數據的時候都會發(fā)生轉碼,目的是在數據庫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環(huán)境Oracle的NLS_LANG參數修改流程:
Windows鍵+R進入到Run對話框,輸入“regedit”進入到注冊表
導航:HKEY_LOCAL_MACHINE --> SOFTWARE --> ORACLE --> KEY_OraDb_home1
右側找到NLS_LANG參數,修改
為AMERICAN_AMERICA.ZHS16GBK 。如果沒有這個參數,請自行創(chuàng)建。

5.這樣修改后,還帶了了一個副作用(是“副作用”,不是“負作用”,意為另外一個好的結果):
在修改NLS_LANG為AMERICAN_AMERICA.ZHS16GBK之前,該參數為
AMERICAN_AMERICA.AL32UTF8 ,是與數據庫Server端保持一致的,雖然這樣設置不會發(fā)生轉碼的現象,但是在Windows的cmd環(huán)境下會出現“一些漢字”(大部分可以)漢字無法錄入的問題,現象如下:
C:\>sqlplus sec/sec@DB_AL32UTF8

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

sec@ora10g> drop table t purge;

Table dropped.

sec@ora10g> create table t (x varchar2(10 char));

Table created.

sec@ora10g> insert into t values ('侯');
ERROR:
ORA-01756: quoted string not properly terminated

這只是一個影響,另外一個著名的影響就是加中文comments的時候也報這樣的錯誤
sec@ora10g> comment on table t is '侯';
ERROR:
ORA-01756: quoted string not properly terminated

OK,問題現象描述清楚了,下面我們修改NLS_LANG參數為AMERICAN_AMERICA.ZHS16GBK,也就是保持和XP系統的字符集一致。
注意:需要重新進入以下SQLPLUS環(huán)境
C:\>sqlplus sec/sec@DB_AL32UTF8

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

sec@ora10g> insert into t values ('侯');

1 row created.

sec@ora10g> comment on table t is '侯';

Comment created.

sec@ora10g> col DUMP(X) for a30
sec@ora10g> select x,dump(x) from t;

X??????????????????? DUMP(X)
-------------------- ------------------------------
侯?????????????????? Typ=1 Len=3: 228,190,175

效果非常的明顯吧,dump后的結果也很清楚的表名,“侯”這個字已經被“轉碼”到AL32UTF8格式的了。

6.小結
通過這個實驗我們妥善處理了兩個實際問題,如果您沒有遇到過,恭喜您,您很幸運。
1)Toad顯示字符亂碼問題
2)Windows XP環(huán)境或Toad環(huán)境下無法插入“某些漢字”和comments的問題

secooler
09.09.23

-- The End --

總結

以上是生活随笔為你收集整理的【字符集UTF8】处理Toad显示乱码及Windows XP下无法插入“某些汉字”问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。