cx_Oracle连接-“UTF-8”与“utf8”编码的区别?

k0pti3hp  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(146)

我有一个从Oracle DB加载一些数据的应用程序。它可以包含捷克字符。当我创建这样的连接时:

conn = cx_Oracle.connect(job_conn_string, encoding="UTF-8", nencoding="UTF-8")

字符串
或者是

conn = cx_Oracle.connect(job_conn_string, encoding="utf-8", nencoding="utf-8")


然后我得到了错误
“utf-8”编解码器无法解码位置87中的字节0xfd:无效起始字节
但当我建立这样的联系时:

conn = cx_Oracle.connect(job_conn_string, encoding="utf8", nencoding="utf8")


或者是

conn = cx_Oracle.connect(job_conn_string, encoding="UTF8", nencoding="UTF8")


一切正常。
这怎么可能?UTF-8/utf-8UTF8/utf8 不能互换是不是很常见?区别就在 Jmeter 板上?
编辑:
当我在游标中执行循环时发生错误。当出现带有捷克字符的行时,它会引发异常。完整的错误是:
UnicodeDecodeError('utf-8',b'"ORA-29902:执行例程ODCIIndexStart()时出错ORA-20004:84 ORA-06512:在“SDE.ST_GEOMETRY_SHAPELIB_PKG”,第12行ORA-06512:在“SDE.ST_GEOMETRY”,第55行ORA-06512:在“SCHEMA:TABLE”,第9行ORA-06512:第2行“",第9行ORA-06512:na line 2\n',87,88,'invalid start byte')

frebpwbc

frebpwbc1#

使用以下查询检查有效的字符集名称:

select * 
from V$NLS_VALID_VALUES
where parameter = 'CHARACTERSET';

字符串
请注意,Oracle字符集UTF8不是Unicode字符集UTF-8
UTF8在Oracle中的意思是CESU-8。只要您使用基本多语言平面,即U+FFFF以下的字符,与UTF-8相同
UTF-8的Oracle字符集是AL32UTF8

相关问题