为什么别人用UTF8存储中文占用3个字节,而我却用6个字节,而且明显是重复了

[复制链接]
查看11 | 回复8 | 2015-3-4 14:52:11 | 显示全部楼层 |阅读模式
这是在10g, Windows 2008 下执行SQLPlusw上的执行结果:
SQL>select value$ from props$ where name='NLS_CHARACTERSET'
VALUE$
--------------------------------------------------------------------------------
UTF8
SQL>create table test1(utf8char varchar2(8))
Table created.
SQL> insert into test1 values('我');
1 row created.
SQL> select utf8char, length(utf8char), dump(utf8char) from test1;
UTF8CHAR LENGTH(UTF8CHAR)
-------- ----------------
DUMP(UTF8CHAR)
--------------------------------------------------------------------------------
??
2
Typ=1 Len=6: 239,191,189,239,191,189
很明显"我"这个中文用了6个字节却存储,而后面3个字节明显是重复的!真不知道这是怎么搞的!!!
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
怎么显示的是乱码? 你插入进去时似乎就出现了问题
select dump('我') from dual;看看
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
执行了:
SQL> select dump ('我') from dual;
DUMP('??')
-------------------------------------
Typ=96 Len=6: 239,191,189,239,191,189
但仍然是6个字节
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
看看NLS_LANG
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
查看NLS_LANG的结果:
SQL> select * from props$ where name='NLS_LANGUAGE';
NAME
------------------------------
VALUE$
--------------------------------------------------------------------------------
COMMENT$
--------------------------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
Language
是AMERICAN Language, 这有关系吗???
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
是NLS_LANG 不是 NLS_LANGUAGE. NLS_LANG 是一个os 级别的参数。
WIN:echo %NLS_LANG%如果没有就设置成 和 db character set 一样的。
Linux:ehco $NLS_LANG
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
"感觉到自己知识一点一点地增加,真是高兴!"
偶只对钱钱在增加感到高兴,别说我太俗,呵呵
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
多谢!已经根据各位的提示解决了!!!
回复

使用道具 举报

千问 | 2015-3-4 14:52:11 | 显示全部楼层
原帖由 tiger516 于 2008-10-17 18:26 发表
多谢!已经根据各位的提示解决了!!!

lz应该将问题如何解决的贴一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行