程序员人生 网站导航

emoji 表情字符插入的配置

栏目:数据库应用时间:2015-07-30 14:50:38

最近做的项目中,在插入 ?? 字符时报错了

ERROR 1366: 1366: Incorrect string value: 'xF0x9Dx8Cx86' for column 'vl' at row 1

在苦苦挣扎了数小时后将其解决掉了~~ 只要将 utf8 转到 utf8mb4 就行了

这个问题其实不是那末难,之所以花了比较长的时间来解决主要还是由于对 MySQL 的配置不是很清楚,还好使用的数据库版本是 5.5.39,由于够荣幸 在版本MySQL 5.5.3 (released in early 2010)时,恰好MySQL 支持了 utf8mb4 字符集。

具体 utf8 和 utf8mb4 的区分,可以参考https://mathiasbynens.be/notes/mysql-utf8mb4

下面把相应的解决方案贴出来,感谢大牛无处不在啊~~

要处理这样的状态肯定少不了更改 /etc/mysql/my.cnf 文件咯,具体文件的位置根据自己的配置查找吧。

我们查看下 MySQL Server 现有的字符集吧

这里写图片描述

这是我现在数据库的配置

接下来我们在 my.cnf 中添加以下配置

[client] default-character-set=utf8mb4 [server] character_set_server=utf8mb4

配置后的情况
这里写图片描述

可以看到配置中的 client、connection、database、result、server 都是 utf8mb4 了。到这里其实就完成了 90%,只要验证下就知道了。

这里写图片描述

很好,没有报错,接下来进行查询,可以看看是不是能够正常显示

这里写图片描述

这1步也正确!
这样我们对数据库的配置也算完成了,不过还要注意的1个问题就是当前操作的数据库、数据表、字段一样是需要支持 utf8mb4 的

# For each database: ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; # For each table: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # For each column: ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

all done!

在做这个更改的进程中我其实同时使用了 mysql-workbench 和 mysql 进行访问的, 但是奇怪的是

SHOW VARIABLES LIKE '%character%'

在 mysql 命令下显示的是本地数据库的配置,而在 mysql-workbench 中的却不是,相当愁闷啊~~
这里写图片描述

可以看到 client、connection 等没有被更改成 utf8mb4, 不知道是否是 mysql-workbench 是不是还有其他的配置,遗憾的是还没有找到具体的配置方案,不过呢,作为临时的解决方案,可以通过以下的命令来处理

SET NAMES utf8mb4

这样感觉相当方便啊,1下子全给改掉了,不过不是持久的~~
这里写图片描述

~~噢噢,暂给出此种方案,知道缘由的帅哥靓妹还望给个提示呢 ^_^

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐