关于oracle的char()以及length(char字符类型) 今天在看书时,⼀个很浅显的问题却百撕不得骑,最后⽹友的⼏个字,豁然........
⾸先了解length(),lengthb()及char(),varchar()
length():--返回以字符为单位的长度.
lengthb(): --返回以字节为单位的长度.
char():这是⼀个定长字符串,会⽤空格填充来达到最⼤长度,⾮null的char(n)总是包含n字节的信息
varchar():这是⼀个变长字符串,不会⽤空格填充⾄最⼤长度
场景还原
SQL> select length(cast('测试'as char(5))) length from dual;
LENGTH
----------
3
开始⼀直以为结果会是2个字符,但事与愿违,查了资料也没答案,后来问⽹友,终于理解了
SQL> select length(cast('测试'as char(4))) length from dual;----将"测试" 转换为char(4)类型
LENGTH
----------
2
SQL> select length(cast('测试'as char(6))) length from dual;
LENGTH
----------
4
在上述的测试中对于第⼆个,测试两字占2个字符4个字节,所以不⽤补空格刚好char(4),所以结果为2,即两字符
oracle 时间转换⽽对于第⼀个,测试占2字符,4字节,不⾜5字节,所以需要⽤空格补满5字节,即补⼀个空格(⼀个字符),结果就是2+1=3字符,第三个⼀样
o(︶︿︶)o 唉。字符,字节,傻傻分不清楚,多么sb的⼀个问题啊,结果搞了这么长时间。
通过这个⽰例,我们可以看出来,Length 和 Lengthb 函数的⼀个重要⽤处,就是⽤来判断记录值⾥是否有中⽂内容。
如果有中⽂,那么Length() != Lengthb()
如果没有中⽂,那么Length() == Lengthb()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论