--session 2
SQL> select * from test;
COL1 COL2
---------- ----------
2 中国
1 涓 浗
从 session 1 和 session 2 的结果中可以看到,相同的字符(注意,我指的是我们看到的
,
显示为相同的字符) ,在不同的字符集输入环境下,显示成了乱码。
在 zhs16gbk 字符集的客户端,我们看到了 utf8 字符集客户端输入的相同的中文变成了乱
码 -->col1=2 的 col2 字段
在 utf8 字符集客户端,我们看到 zhs16gbk 字符集的客户端输入的中文变成了另外的字符
-->col1=1 的 col2 字段
从这个例子里, 我们好像感觉到出了什么问题, 也可能会联想起现实环境中出现的乱码问
题。
问题似乎有了思路, ok ,让我们继续把实验做下去:
--session 1 (或者 session 2 ,在这里无所谓)
SQL> select col1,dump(col2,1016) from test;
COL1
----------
DUMP(COL2,1016)
--------------------------------------------------------------------------------
2
Ty p=1 Len=4 CharacterSet=AL32UTF8: d6,d0,b9,fa
1
Ty p=1 Len=6 CharacterSet=AL32UTF8: e4,b8,ad,e5,9b,bd
我们使用了 dump 函数,结果看起来很明显了,两个完全相同的字符,在不同的字符集
环境下,在数据库中存储成了不同的编码。
对于 ZHS16GBK 的字符集客户端输入的字符 " 中国 "
,
AL32UTF8 使用了 3 个字节来分 别
存储一个字符,即:
中 --e4,b8,ad
国 --e5,9b,bd
我们也可以分别对这个字符进行验证:
--session 1
SQL> select dump(' 中 ',1016) from dual;
DUMP(' 中 ',16)
评论