为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle 无法存储表情符号

Oracle 无法存储表情符号

小怪兽爱吃肉 2021-10-28 14:48:04
我在将表情符号保存到 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 数据类型(假设您有可用的扩展字符集)。

//img1.sycdn.imooc.com//617a47d80001f90609130328.jpg

查看完整回答
反对 回复 2021-10-28
?
大话西游666

TA贡献1817条经验 获得超14个赞

为了在 sql*plus 中看到表情符号,请执行以下操作:

在 Windows 上,它将是:

chcp 65001 
set NLS_LANG=.AL32UTF8
sqlplus ...

关于java中的设置,请查看Database JDBC Developer's Guide - Globalization Support

更新:

当您的字符集WE8MSWIN1252仅为单字节时,您无法存储 Unicode 表情符号。使用NCLOB数据类型或将数据库迁移到 UTF-8,请参阅字符集迁移


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 433 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信