oracle中长字符串长度吗,oracle 字符长度

知识背景:在oracle中 定义char 类型  一个中文占用2个字节,一个英文占用一个字节

例子1 create table nation_t (country char(10),text varchar2(20))

SQL> select length(country),country,length(text) from nation_T;

LENGTH(COUNTRY) COUNTRY              LENGTH(TEXT)

--------------- -------------------- ------------

6 中国                            6

10 ASDFWWEEWE                     10

4 中国人                          4

看到这个结果我晕了,,,,

’中国    ‘比'中国人 '还长??  拷出来 中国+4个空格   中国人+1个空格 这是什么情况? 接受不了了

求解!!!!!!!!!怀疑是字符集的问题 查了下是AL32UTF8

例子2:换个数据库 ZHS16GBK

创建同样表,插入同样数据

SQL> SELECT length(country),country,length(text) from nation_T;

LENGTH(COUNTRY) COUNTRY    LENGTH(TEXT)

--------------- ---------- ------------

8 中国                  2

7 中国人                3

我彻底崩溃了。。。

我就瞎猜吧  这个长度难道是空格的长度??突然 看到希望:汉字虽然是用2个字节表示,但是长度还1是 得出:10-2*2=6  6+2=8 即是例子2的答案。

但是例子1如何解释??

一个汉字占3个字节??得出答案。

以前 看盖国强的书,他鼓励dba大胆猜想。我觉着靠谱。

通过猜想,貌似自己的答案无懈可击。

验证:

SQL> SELECT DUMP(COUNTRY),country FROM NATION_T;

DUMP(COUNTRY)

--------------------------------------------------------------------------------

COUNTRY

----------

Typ=96 Len=10: 214,208,185,250,32,32,32,32,32,32

中国

Typ=96 Len=10: 214,208,185,250,200,203,32,32,32,32

中国人

果真在ZHS16GBK 字符集下  每个汉字用2个字节,再看AL32UTF8

SQL> SELECT DUMP(COUNTRY),country FROM NATION_T;

DUMP(COUNTRY)

--------------------------------------------------------------------------------

COUNTRY

--------------------

Typ=96 Len=10: 228,184,173,229,155,189,32,32,32,32

中国

Typ=96 Len=10: 65,83,68,70,87,87,69,69,87,69

ASDFWWEEWE

有一点强调一下:本来是看字符串长度的,最后发现问题是存储的问题。所以说有时候某字段超过限制 很多人用length 来比较有没有超过限制,

我也这个搞过,呵呵,看来以后得注意了。不如定义varchar2(20),放10个汉字就满了,放不下别的字符了已经,但是查长度还是10。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值