美文网首页Java相关MySQL服务端开发实战
Java后台MySQL数据库支持emoji表情

Java后台MySQL数据库支持emoji表情

作者: jiangadam | 来源:发表于2016-12-21 11:29 被阅读192次

    最近在弄帖子的发布与回复问题,然后再iOS端和Android端添加表情的时候都会出错

    Caused by: java.sql.SQLException: Incorrect string value: '\xF6\x9D\x98\x84' for column 'comment' at row 1
    

    提示表情有问题,然后赶紧查资料。

    首先数据库编码为UTF-8,字段content设置为text(CHARSET=utf8 COLLATE=utf8_unicode_ci)用于存储帖子内容信息,现在上线新功能存储emoji表情,插入emoji表情就会报出上述错误,UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。utf8mb4兼容utf8,且比utf8能表示更多的字符,所以要设置数据库的编码为utf8mb4。

    数据库编码从utf8设置为utf8mb4

    1 修改my.cnf文件

    [client]
    default-character-set=utf8mb4
      
    [mysql]
    default-character-set=utf8mb4
      
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect = 'SET NAMES utf8mb4'
    character-set-client-handshake = false
    

    2 对数据库相关的表进行字符集修改

    将数据库转换为utf8mb4
    ALTER DATABASE post CHARACTER SET utf8mb4  COLLATE utf8mb4_unicode_ci;
    
    ALTER TABLE `post_article` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    ALTER TABLE `post_article` MODIFY COLUMN `content`  text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    

    3 重启数据库

    sudo /etc/init.d/mysql restart
    

    4 检查数据库的字符集是否是utf8mb4

    SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';
    

    5 java 设置
    设置Java的数据库连接,将characterEncoding去掉,然后保证mysql connector版本高于5.1.13,就OK了

    本文连接

    相关文章

      网友评论

        本文标题:Java后台MySQL数据库支持emoji表情

        本文链接:https://www.haomeiwen.com/subject/hicqvttx.html