|
解释ygzeng朋友第三个实验结果
3.
SET NLS_LANG=AMERICAN_AMERICA.UTF8
client的设置本应与操作系统一致,在某些特殊情况下,为避免字符集转换,设置成与数据库字符集一致,而此时却人为设置成第三种字符集,肯定会造成混乱。
insert into charset_test(server_charset,os_charset,client_charset,cn_char) values('ISO8859','GB2312','UTF8','中文');
select server_charset,os_charset,client_charset,cn_char,dump(cn_char) dump from charset_test where client_charset='UTF8'
and os_charset='GB2312';
SERVER_CHARSET OS_CHARSET CLIENT_CHARSET
--------------------- --------------------- ---------------------
CN_CHAR DUMP
--------------------- ------------------------------
ISO8859 GB2312 UTF8
驴驴 Typ=1 Len=2: 191,191
此时'中文'实际用的GB2312的编码,而使用者却告诉Oracle这是UTF8的编码,转化为ISO8859-1,没有对应的字符,转换为替换字符(191,191)。
而在查询时,比较有意思,ISO8859-1的字符(191)可以转化为UTF8的字符,其对应字符为11000010 10111111(C2 BF),而操作系统使用的是GB2312编码,而(C2 BF)在GB码中对应的是“驴”字,所以显示为“驴”。
另外,请ruishi朋友在Oracle 9i下建库再试一下。 |
|