暂无图片
Oracle 用ASCII值查其对应的字符,大过128就报错
我来答
分享
Thomas
2023-11-12
Oracle 用ASCII值查其对应的字符,大过128就报错

SQL> select chr(128) from dual;

CHR
---


SQL> select chr(129) from dual;
ERROR:
ORA-29275: partial multibyte character

no rows selected

ASCII值大于128的字符,难道不也是对应一个BYTE吗?

我来答
添加附件
收藏
分享
问题补充
8条回答
默认
最新
伟鹏

Oracle数据库默认使用的字符集是US7ASCII,该字符集仅支持128个ASCII字符。如果需要使用扩展的字符集,可以考虑使用其他的字符集,例如UTF-8

暂无图片 评论
暂无图片 有用 10
暂无图片
Thomas

我查了下,DB端字符集是ZHS16GBK,这个也是只支持128个ASCII字符?换言之,如果DB端字符集是AL32UTF8,那就不会报错罗?

暂无图片 评论
暂无图片 有用 0
伟鹏

是的

暂无图片 评论
暂无图片 有用 0
Thomas


暂无图片 评论
暂无图片 有用 0
Thomas

伟大师,我找了个字符集是AL32UTF8的库,确实select chr(130)不报错了,但为何一律返回问号呢?

暂无图片 评论
暂无图片 有用 0
伟鹏

在UTF-8中,对于ASCII字符集中的字符,其编码方式与ASCII字符集完全相同,都是采用单字节表示,一个字节是八位,但是编码只占用后7位,最前面1位统一设置为0,这个就代表了128个字符。

UTF-8是多字节编码,可以用1~6个字节变长编码表示,英文通常使用1个字节表示,中文常用3个字节表示

ASCII字符集只支持128个字符,129超出了这个范围,当您尝试将一个超出ASCII范围的数值传递过去的时候,她就认为是无效的了,然后显示“?”   

暂无图片 评论
暂无图片 有用 0
Thomas

能否这样理解,尽管ASCII表里有256个字符,但在ORACLE里,ASCII只能表示129以前的字符?

暂无图片 评论
暂无图片 有用 0
伟鹏

标准的ASCII里有128个字符,utf8兼容这个。后来有过拓展的ASCII是256个字符。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏