首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AL32UTF8中的Oracle /RPAD函数问题

AL32UTF8中的Oracle /RPAD函数问题
EN

Stack Overflow用户
提问于 2013-11-27 11:23:49
回答 2查看 3.2K关注 0票数 7

NLS_CHARACTERSET是Oracle数据库中的AL23UTF8。我在使用RPAD函数时遇到了问题:

代码语言:javascript
复制
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
Connected as apps@UATSED

SQL> 
SQL> SELECT '甲骨文' ORACLE, LENGTHB('甲骨文') ORACLE_LENGTH,
  2         RPAD('甲骨文', 10, '$') ORA_RPAD, LENGTHB(RPAD('甲骨文', 10, '$')) ORA_RPAD_LENGTH
  3    FROM dual
  4  ;

ORACLE    ORACLE_LENGTH ORA_RPAD      ORA_RPAD_LENGTH
--------- ------------- ------------- ---------------
甲骨文                9 甲骨文$$$$                 13

SQL> 

我们知道,在AL32UTF8编码方法中,汉字需要3个字节。因此,在我的示例中,lengthb函数返回正确的结果。但是我们使用RPAD函数来使用$来填充更多的空格,一个汉字需要2个字节,而不是3个字节。因此,当我总共填充10个字节时,它为我填充了4个$标志。

我的问题是为什么RPAD功能不像延长线那样?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-24 10:08:25

作为@jonearles的请求,我把我在评论部分的解决方案作为一个单一的答案在这里帮助人们解决这个问题。

嗨,伙计们,我通过谷歌搜索找到了原因和解决办法。以下是Oracle文档中的解释:“返回值在终端屏幕上显示的总长度。在大多数字符集中,这也是返回值中的字符数。但是,在一些多字节字符集中,字符串的显示长度可能与字符串中的字符数不同。”解决方法取决于屏幕中的实际显示长度(以单频字体查看文本)

解决方案

代码语言:javascript
复制
-- 1) 
SELECT RPAD('甲骨文', 10 - LENGTHC('甲骨文'), '$') FROM DUAL; 
-- 2) Recomended!
SELECT SUBSTRB('甲骨文' || RPAD('$', 10, '$'), 1, 10) FROM DUAL;
票数 1
EN

Stack Overflow用户

发布于 2013-12-23 15:13:01

这是甲骨文虫。错误的原因是:每$是一个字节,但每个汉字是3个字节。当这个版本中的RPAD运行时,他只计算出3个中文+ 10美元=13个字节。当他显示13个字节时,他必须减少一些$s。欢迎使用Oracle打开bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20241137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档