【问题标题】:can't save smileys in mysql DB liferay无法在 mysql DB liferay 中保存笑脸
【发布时间】:2017-04-05 22:44:17
【问题描述】:

我正在使用 liferay 6.2mysql- 5.5.52。在一个自定义 portlet 中,我公开了一些由 Android 和 ios 应用程序使用的 Web 服务,在某些 api 中它们是一个字符串参数,如果我们在该参数中发送微笑,如 ????????,它会抛出异常:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x90\xF0\x9F...' for column 'comment_' at row 1,我也尝试将数据库排序规则更改为utf8mb4 -default collat​​ion,在这种情况下,我可以保存这个☺,但不能保存其他人,我正在尝试找出问题所在。

【问题讨论】:

    标签: mysql exception save liferay portlet


    【解决方案1】:

    由于您没有提供具体更改内容的详细信息,因此很难确定此答案是否相关。以防万一,请务必更改字符集,而不仅仅是排序规则

    字符集是一组符号和编码。排序规则是一组用于比较字符集中的字符的规则。

    还要仔细检查您的数据库连接字符串。它可能会强制执行与为数据库/表指定的编码不同的编码。

    【讨论】:

    • 我尝试过更改字符,也尝试过将mysql变量character_set_client、_connection和_results更改为utf8mb4,但仍然是同样的问题。
    • 现在我正在做的是在保存之前将字符串编码为base64并保存,但在解码时得到不同的结果。
    【解决方案2】:

    问题可能出在任何层上——绝对与编码有关(正如 Milen 在他的回答中所描述的那样)。您可能会从您的 Web 服务中获取非法编码(或解码)的内容,在数据库连接(客户端)中对其进行破坏,或者在数据库中使用错误的编码。 Liferay 的文档只提到了数据库的create database dbname character set utf8;

    易于测试和发现的 UTF-8 字符的主要来源之一是 http://fliptitle.com - 一旦您最喜欢的测试文本正确通过,您的编码就可能正确。如果没有:检查您的字体,因为它们没有使用所有字符,或者您的某个地方的编码错误。

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 2015-06-30
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 2018-11-22
      相关资源
      最近更新 更多