Java 在MySQL中存储Android表情符号

Java 在MySQL中存储Android表情符号,java,mysql,emoji,Java,Mysql,Emoji,我们将用户选择的表情符号存储在MySQL的文本体中。我们有这样的专栏 `body` text CHARACTER SET utf8 COLLATE utf8_bin, 原始数据:\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\uDE3A\uD83D\uDE3A\uD83D\uDE1D 数据库中的数据:? 但是如果从RESTAPI获取它,它看起来是正确的:“body”:“\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\u

我们将用户选择的表情符号存储在MySQL的文本体中。我们有这样的专栏

`body` text CHARACTER SET utf8 COLLATE utf8_bin,
原始数据:
\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\uDE3A\uD83D\uDE3A\uD83D\uDE1D

数据库中的数据:

但是如果从RESTAPI获取它,它看起来是正确的:
“body”:“\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\ud3a\uD83D\ud3a\uD83D\uDE1D”,

现在,当我使用RESTAPI更新这个问题时,它会松开它的编码并显示“?”

更新后来自端点的数据:
“body”:“???????”,


更新主体时有特殊的逻辑,所以有人知道这里发生了什么吗

要将emojis存储到Mysql数据库中,请将存储的字符串转换为编码的Base 64字符串。在应用程序端,您所要做的就是使用Base 64解码该字符串

编码

                byte[] data = editTextFieldWithEmojis.getText().toString().getBytes("UTF-8");
                base64String = Base64.encodeToString(data, Base64.DEFAULT);
解码

                byte[] data = Base64.decode(stringWithEmojis, Base64.DEFAULT);
                newStringWithEmojis = new String(data, "UTF-8");

要将emojis存储到Mysql数据库中,请将存储的字符串转换为编码的Base 64字符串。在应用程序端,您所要做的就是使用Base 64解码该字符串

编码

                byte[] data = editTextFieldWithEmojis.getText().toString().getBytes("UTF-8");
                base64String = Base64.encodeToString(data, Base64.DEFAULT);
解码

                byte[] data = Base64.decode(stringWithEmojis, Base64.DEFAULT);
                newStringWithEmojis = new String(data, "UTF-8");

准确记录Java端的每个字符串,并切换到数据库中的
utf8mb
。感谢Karol S,我得到了未知字符集:“utf8mb”我想我们使用的是<5.5的MySQL。安全吗?我的意思是,我们有5年的生产数据,所以它可以通过将数据转换为“utf8mb”来破坏数据。我不能保证任何事情。我建议在尝试转换任何内容之前进行备份,并更新MySQL以确保安全性和性能。谢谢Karol S。但有一个问题困扰着我,为什么在插入时它可以工作,而在更新时却会把它搞砸?我们正在使用hibernate,这可能是个问题吗?也许。您是否在应用程序端和/或数据库端记录SQL?日志可以提供一些帮助。准确地记录Java端的每个字符串,并切换到数据库中的
utf8mb
。感谢Karol S,我得到了未知字符集:“utf8mb”,我想我们使用的是<5.5的MySQL。安全吗?我的意思是,我们有5年的生产数据,所以它可以通过将数据转换为“utf8mb”来破坏数据。我不能保证任何事情。我建议在尝试转换任何内容之前进行备份,并更新MySQL以确保安全性和性能。谢谢Karol S。但有一个问题困扰着我,为什么在插入时它可以工作,而在更新时却会把它搞砸?我们正在使用hibernate,这可能是个问题吗?也许。您是否在应用程序端和/或数据库端记录SQL?原木可以提供一些线索。