我正在编写一个C++数据转换程序,它将数据从ODBC数据源复制到Oracle数据库中。由于要移动的数据量很大(数十亿行),所以选择了C++ (具有数组操作)。
现在,文本列被“假定”为UTF-8,但情况并不总是如此。如果不是,我仍然希望将无效的原始字节复制到Oracle中。我们稍后会把它们清理干净。该列是一个简单的VARCHAR2(100),长度为100个字节。但是Oracle似乎在尝试对数据进行某种类型的UTF-8解析/处理。
例如,以下字符串(已被截断为100个字节,因此无效):
Hex Bytes: 46 46 54 F0 9F 98 84 F0 9F 98 88 F0 9F 98 94 F0 9F 98 85 F0 9F 98 90 F0 9F 98 88 F0 9F 98 94 F0 9F 98 88 F0 9F 98 85 F0 9F 98 94 F0 9F 98 86 F0 9F 98 94 F0 9F 98 85 F0 9F 98 90 F0 9F 98 90 F0 9F 98 86 F0 9F 98 90 F0 9F 98 90 F0 9F 98 87 F0 9F 98 90 F0 9F 98 92 F0 9F 98 88 F0 9F 98 9A F0 9F 98 88 F0http://tinyurl.com/nhhkf62
实际上正在将以下内容插入到数据库中:
Hex Bytes: 46 46 54 EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BDhttp://tinyurl.com/orkv6z6
它基本上是前面的3个ascii字符,然后是U+FFFD的UTF-8编码,用于每个后续字节。
其他详情:
Oracle Version: 11g Enterprise Edition Release 11.2.0.1.0
Oracle Client: oracle-instantclient11.2-basic-11.2.0.3.0-1
Oracle OCI rpm: oracle-instantclient11.2-devel-11.2.0.3.0-1
Environment: LANG=en_US.UTF-8
Environment: NLS_CHARACTERSET=AMERICAN_AMERICA.UTF8
Environment: NLS_LANG=AMERICAN.UTF8那么,有人知道Oracle和/或OCI为什么要修改这些数据吗?有什么办法阻止它的发生吗?
谢谢
发布于 2013-10-30 06:07:01
NLS_LANG是隐式字符转换中最重要的部分。我想应该是NLS_LANG=AMERICAN_AMERICA.UTF8而不是NLS_LANG=AMERICAN.UTF8
您的数据库字符集是什么?
https://stackoverflow.com/questions/19672212
复制相似问题