gpt4 book ai didi

java - Oracle 无法存储表情符号

转载 作者:行者123 更新时间:2023-12-01 07:45:53 24 4
gpt4 key购买 nike

我在将表情符号保存到 Oracle 数据库时遇到问题。这是一个简单的 Java 程序,它从网页获取用户输入并将其保存到数据库。

这是保存到数据库之前的样子。

enter image description here

这就是从数据库检索它时的样子。

enter image description here

数据库列定义为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

正如我所见,CharacterSet 是 WE8MSWIN1252,它与 Oracle 实例的 NLS_CHARACTERSET 相匹配。

是否有解决方法可以使用 WE8MSWIN1252 保存表情符号?

Base64 编码可能是一种解决方法,但我想知道是否有更好的解决方案。

最佳答案

您完全可以在 Oracle DB 中存储表情符号或任何其他多字节字符。

并在 SQL Developer 中查看它们。

我的数据库有 UTF-8 字符集。

My SQL Developer 有表情符号友好的显示字体。

我有一个足够宽的文本字段来存储这些。

显示字体设置为“Segoe UI Emoji”

它们存储在 CLOB 中,但足够宽的 VARCHAR2 也可以工作。

如果您的数据库字符集不是 UTF-8 或类似字符集,则假设您有可用的扩展字符集,您可能需要依赖 NCLOB 或 NVARCH2 数据类型。

enter image description here

关于java - Oracle 无法存储表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52666272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com