今天在看书时,一个很浅显的问题却百撕不得骑姐,最后网友的几个字,豁然........
首先了解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,即两字符
而对于第一个,测试占2字符,4字节,不足5字节,所以需要用空格补满5字节,即补一个空格(一个字符),结果就是2+1=3字符,第三个一样
o(︶︿︶)o 唉。字符,字节,傻傻分不清楚,多么sb的一个问题啊,结果搞了这么长时间。
通过这个示例,我们可以看出来,Length 和 Lengthb 函数的一个重要用处,就是用来判断记录值里是否有中文内容。
如果有中文,那么Length() != Lengthb()
如果没有中文,那么Length() == Lengthb()
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29014732/viewspace-772714/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29014732/viewspace-772714/