我在将表情符号保存到 Oracle 数据库时遇到问题。这是一个简单的 Java 程序,它从网页获取用户输入并将其保存到数据库中。
这是我保存到数据库之前的样子。
这就是它从数据库中检索它时的样子。
数据库列定义为CLOB我期望它使用表情符号保留文本就好了。
我还尝试使用 sqlplus 保存和检索表情符号,但也没有运气:
SQL> update emoji_table set emoji_column = 'Test 😂' where emoji_table_id = 123;
1 row updated.
SQL> select emoji_column from emoji_table where emoji_table_id = 123;
EMOJI_TABLE
--------------------------------------------------------------------------------
Test ????
我认为 Oracle 字符编码或类似问题可能存在问题。您能否建议可能出现的问题以及在哪里寻找潜在的修复方法。
谢谢
更新 #1
正如 Wernfried Domscheit 所建议的,我检查了我的 NLS_CHARACTERSET,它似乎是WE8MSWIN1252。
据我了解,这是问题的根本原因,它不是 UTF-8,因此没有保留的表情符号列表。
的输出
select DUMP(emoji_column, 1016) from emoji_table where emoji_table_id = 123
正在关注
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CLOB
你能建议如何解决吗?
更新 #2
这是 DUMP sql 查询的输出:
select DUMP(TO_CHAR(emoji_column), 1016) from emoji_table where emoji_table_id = 123
DUMP(TO_CHAR(TEMPLATE),1016)
--------------------------------------------------------------------------------
Typ=1 Len=6 CharacterSet=WE8MSWIN1252: 42,6f,64,79,20,bf
正如我所看到的 CharacterSetWE8MSWIN1252与NLS_CHARACTERSETOracle 实例的匹配。
有没有办法用 来保存表情符号WE8MSWIN1252?
或许Base64编码可能是一个解决方法,但我想知道是否有更好的解决方案。
缥缈止盈
大话西游666
相关分类