如何在DB2数据库中存储表情符号字符?

问题描述 投票:0回答:2

我有一个应用程序,它将推文存储在DB2数据库中,并且需要一些时间来检索它们。我在显示带有表情符号的文本字符串时遇到了麻烦(有些表情符号失去了格式)。

我一直在互联网上阅读不同的答案,但是大多数答案是针对MySQL的(从utf8切换到utf8mb4),但对于DB2则没有任何答案...

在DB2数据库中,有什么方法可以执行以下操作?

https://mathiasbynens.be/notes/mysql-utf8mb4

非常感谢

sql database db2 emoji
2个回答
0
投票

您能否说明问题所在?对于UTF-8数据库,链接的示例没有问题]

$ db2 "create table emoji(string_with_emjoi varchar(32))"
DB20000I  The SQL command completed successfully.

$ db2 "insert into emoji values 'foo𝌆bar'" 
DB20000I  The SQL command completed successfully.

$ db2 "select string_with_emjoi, hex(string_with_emjoi) string_with_emjoi_hex from emoji"

STRING_WITH_EMJOI                STRING_WITH_EMJOI_HEX                                           
-------------------------------- ----------------------------------------------------------------
foo𝌆bar                          666F6FF09D8C86626172                                            

emjoi的代码点存储有4个字节(0xF09D8C86)。如果在检索后显示表情符号时遇到问题,则需要更深入地挖掘并查看数据库返回的实际值是什么-问题很可能出在应用程序本身中。


0
投票

您可以在Db2 Unicode数据库中使用这样的Unicode常量

$ db2 "values U&'\+01F600'"

1   
----
😀   

  1 record(s) selected.

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000731.html

U&,后跟一个以字符串定界符开头和结尾的字符序列,并可选地后面是UESCAPE子句。字符串常量的这种形式也称为Unicode字符串常量。

一个字符可以通过其印刷字符(字形)或其Unicode代码点表示。 Unicode字符的代码点范围从X'000000'到X'10FFFF'。

要通过其代码点表示Unicode字符,请使用Unicode转义字符后跟4个十六进制数字,或使用Unicode转义字符后接加号(+)和6个十六进制数字。默认的Unicode转义字符是反斜线()

或者您可以根据需要使用UTF-8十六进制值

db2 "values x'F09F9880'"

1   
----
😀   

  1 record(s) selected.
© www.soinside.com 2019 - 2024. All rights reserved.