MySQL存储emoji表情

原创
2017/04/27 11:15
阅读数 116
描述:由于字符集不支持的异常,因为utf-8编码有可能是两个、三个、四个字节,
      其中Emoji表情是四个字节,而MySQL的utf-8编码最多三个字节,所以导致数据插不进去。
      utf8mb4的最低mysql版本支持版本为5.5.3+

方式1:修改数据库层面
	查看数据库字符集:
		SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
		保证character_set_client/character_set_connection/character_set_database/character_set_results/character_set_server为utf8mb4。

	步骤1:修改数据库的字符集编码(database, table, column)
		-- 修改database字符集编码
		ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
		-- 修改表的字符集编码
		ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
		-- 修改列的字符集编码
		ALTER TABLE table_name CHANGE column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

	步骤2:修改MySQL的配置文件(my.ini/my.cnf),需重启MySQL(mysql restart)
		[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'
		
	步骤3:升级最新版的mysql-connector-java >5.1.13,否则仍然无法使用utf8mb4
		其中的characterEncoding=utf8可以自动被识别为utf8mb4
		jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE

方式2:应用层转码和编码
	URLEncoder.encode(emoji, "utf-8");
	URLEncoder.decode(emoji, "utf-8");

 

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部