我在将表情符号保存到 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 = 123DUMP(TO_CHAR(TEMPLATE),1016)--------------------------------------------------------------------------------Typ=1 Len=6 CharacterSet=WE8MSWIN1252: 42,6f,64,79,20,bf正如我所看到的 CharacterSetWE8MSWIN1252与NLS_CHARACTERSETOracle 实例的匹配。有没有办法用 来保存表情符号WE8MSWIN1252?或许Base64编码可能是一个解决方法,但我想知道是否有更好的解决方案。
2 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
您可以在 Oracle DB 中完全存储表情符号或任何其他多字节字符。
并在 SQL Developer 中查看它们。
我的数据库有一个 UTF-8 字符集。
My SQL Developer 有一个表情友好的显示字体。
我有一个足够宽的文本字段来存储这些。
显示字体设置为“Segoe UI Emoji”
它们存储在 CLOB 中,但足够宽的 VARCHAR2 也能正常工作。
如果您的 db 字符集不是 UTF-8 或类似字符集,则您可能需要依赖 NCLOB 或 NVARCH2 数据类型(假设您有可用的扩展字符集)。
大话西游666
TA贡献1817条经验 获得超14个赞
为了在 sql*plus 中看到表情符号,请执行以下操作:
选择能够显示表情符号的字体(请参阅FACE WITH TEARS OF JOY (U+1F602) 字体支持)
将控制台的字符集设置为 UTF-8
设置
NLS_LANG
相应运行 slqplus
在 Windows 上,它将是:
chcp 65001 set NLS_LANG=.AL32UTF8 sqlplus ...
关于java中的设置,请查看Database JDBC Developer's Guide - Globalization Support。
更新:
当您的字符集WE8MSWIN1252
仅为单字节时,您无法存储 Unicode 表情符号。使用NCLOB
数据类型或将数据库迁移到 UTF-8,请参阅字符集迁移
添加回答
举报
0/150
提交
取消