zoukankan      html  css  js  c++  java
  • mysql表情存储报错问题

    mysql采用utf-8字符编码,但在移动端使用输入法的表情并存储数据库的时候,出现错误。

    java.sql.SQLException: Incorrect string value: 'xF0x9Fx92x94'...

    经排查,原因在于utf-8编码无法存储表情字符。

    解决步骤:

    1. 更改数据库编码为utf8mb4和utf8mb4_unicode_ci
    2. 更改所需要存储表情的那张表的编码为utf8mb4和utf8mb4_unicode_ci
    3. 更改表中存储的那个字段的编码为utf8mb4和utf8mb4_unicode_ci
    4. 项目的数据库连接properties资源文件把URL的编码参数去掉
      经过以上的操作,表情可以存储到数据库了,但是出现问题是全部变成了??乱码
    5. 修改mysql配置文件my.cnf(windows为my.ini,linux为my.cnf)
      my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容:
      [client]

      default-character-set = utf8mb4

      [MySQL]

      default-character-set = utf8mb4

      [mysqld]

      character-set-client-handshake = FALSE

      character-set-server = utf8mb4

      collation-server = utf8mb4_unicode_ci

      init_connect='SET NAMES utf8mb4'

    6. 重启mysql数据库,重新查看字符集

      经过5、6两个步骤,最后成功存储表情,并且查询显示也是可以的。

      除了这种方式,事实上,我们还可以对储存的数据进行编码,取的时候进行解码,这样也能解决这个问题,只是这种方式比较麻烦,你需要在所有存储该字段的地方编码,并在所有取用该字段的地方解码:
      1         try {
      2             URLEncoder.encode("sss", "utf8"); // 编码
      3             URLDecoder.decode("sss", "utf8"); // 解码
      4         } catch (UnsupportedEncodingException e) {
      5             e.printStackTrace();
      6         }
  • 相关阅读:
    ComboBoxEdit 数据绑定 使用模板
    ObservableCollection
    ListView.MouseDoubleClick
    Style 的查找 FindResource
    OpenFileDialog
    ItemsControl
    下拉框比较符
    ListView 控件与 内容
    测试oracle数据库连接
    MySQL ERROR 1300 (HY000): Invalid utf8 character string
  • 原文地址:https://www.cnblogs.com/lay2017/p/7452897.html
Copyright © 2011-2022 走看看