我有一个应用程序,它将推文存储在DB2数据库中,并且需要一些时间来检索它们。我在显示带有表情符号的文本字符串时遇到了麻烦(有些表情符号失去了格式)。
我一直在互联网上阅读不同的答案,但是大多数答案是针对MySQL的(从utf8切换到utf8mb4),但对于DB2则没有任何答案...
在DB2数据库中,有什么方法可以执行以下操作?
https://mathiasbynens.be/notes/mysql-utf8mb4
非常感谢
您能否说明问题所在?对于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)。如果在检索后显示表情符号时遇到问题,则需要更深入地挖掘并查看数据库返回的实际值是什么-问题很可能出在应用程序本身中。
您可以在Db2 Unicode数据库中使用这样的Unicode常量
$ db2 "values U&'\+01F600'"
1
----
😀
1 record(s) selected.
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.