【发布时间】:2020-01-10 23:00:30
【问题描述】:
我正在尝试将数据插入/更新到几乎没有非 Ascii 字符的 BLOB 列中。当我检索列值时,它们的获取方式与插入它们时不同。
// 这是非常大的数据文本的示例数据或数据 sn-p,我看到更新后的差异。
试过这个更新的查询:
更新 Blob_table SET FILE_BLOB = utl_raw.cast_to_raw('00001Ý#01¨ return') 其中 eid = 1;
当我取表时:
SELECT FILE_BLOb FROM Blob_table WHERE eid = 1;
以上查询输出:00001×#01×返回
预期: 00001Ý#01¨ 返回
实际: 00001Ã#01¨ 返回
谁能解释为什么数据被错误检索以及如何修复它们?
Oracle 数据库版本:
"Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - 生产 版本 18.5.0.0.0"
字符集详情:
NLS_NCHAR_CHARACTERSET - AL16UTF16
NLS_CHARACTERSET - AL32UTF8
【问题讨论】:
-
这一般是字符集的问题。您使用哪种工具来获取数据?
-
SQL Developer 4.2.0.16.356
-
你为什么用
BLOB而不是CLOB?字符集 AL32UTF8 支持任何字符,所以转换为 BLOB 对我来说似乎毫无意义。 -
是的,我同意。但是这个表已经是现有的表,用户想要这样。我们看到一些特殊字符进入该表。所以想知道为什么这些原始字符会被改变,有什么方法可以用 BLOB 列本身来修复它们。否则(没有其他选择)我们必须向用户推荐有 CLOB 列。
-
如果是BLOB,用户在SQL Developer中上传文件:it.toolbox.com/blogs/loannismoutsatsos/…