Java 在MySQL中存储Android表情符号
我们将用户选择的表情符号存储在MySQL的文本体中。我们有这样的专栏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
`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?原木可以提供一些线索。