【问题标题】:Storing Android Emoji in MySQL在 MySQL 中存储 Android 表情符号
【发布时间】:2014-09-01 07:29:37
【问题描述】:

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

`body` text CHARACTER SET utf8 COLLATE utf8_bin,

原始数据:<div id='mobile-question-style' style=\"font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;\">\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\uDE3A\uD83D\uDE3A\uD83D\uDE1D</div>

数据库中的数据:<div id='mobile-question-style' style="font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;">????????????</div>

但是如果从 Rest API 获取它,它看起来是正确的:"body":"<div id='mobile-question-style' style=\"font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;\">\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\uDE3A\uD83D\uDE3A\uD83D\uDE1D</div>",

现在当我更新问题时,使用 Rest API 会丢失它的编码并显示“????”

我更新后来自端点的数据:"body":"<div id='mobile-question-style' style=\"font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;\">????????????</div>",

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

【问题讨论】:

  • 准确记录 Java 端的每个字符串,并在数据库中切换到 utf8mb。
  • 谢谢 Karol S,我得到了 Unknown character set: 'utf8mb' 我想我们使用的是
  • 我不能保证任何事情。我建议在尝试转换任何内容之前进行备份,并更新 MySQL 以确保安全性和性能。
  • 感谢 Karol S. 但有一个问题困扰着我,为什么我插入时它可以工作,但我更新时却搞砸了?我们正在使用休眠,会不会有问题?
  • 也许吧。您是在应用程序端和/或数据库端记录 SQL 吗?日志可以提供一些启示。

标签: java mysql emoji


【解决方案1】:

要将表情符号存储到 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");

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多