微信小程序开发系列(五)——小程序中存储emoji表情符
我的小程序整个架构是 app+ asp.net + mysql
因为在“短信定时提醒”中的“随手记”里想存储表情符,所以还是经过了一番折腾的。
首先上网查遍了emoji表情符的设置方法,参见以下链接文章
http://blog.csdn.net/u012329294/article/details/78961682
网上介绍的所有方法都是告诉你字符要从utf8变更为utf8mb4,才能存储4个字节。
但我将mysql数据库中的字符集更改为utf8mb4,仍然无法保存成功。
mysql> SHOW VARIABLES WHERE Variable_name LIKE ``'character%'``OR Variable_name LIKE ``'collation%'``;
``
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
发现始终存在4个变量还是为uft8,
character_set_client、character_set_connection 、character_set_results、collation_connection
怎么弄才能解决这个问题啊? 这个困扰了我很久!尝试了各种办法都不行。
最后坐下来慢慢思考这4个变量的含义。
从第一个变量中间有一个client,我猜想到是不是这个需要客户端进行配置啊。
所以大胆的将web.config中数据库连接character=”utf8”变为character=”utf8mb4”,
哈哈哈,这个竟然出现了神奇的效果,突然成功了一次,欣喜万分。
不过接下来又出现了新的问题,保存到“随手记”中的字符,保存时是乱码,修改时才能变成表情符。
到底这两个有什么区别呢?
原来我的开发中在修改的时候用的原始的SQL语句,但在保存的时候使用的是存储过程。
是不是存储过程有问题?
嗯,顺着这个思路往下找,发现存储过程中有事务,那么会不会是事务造成字符集失效呢?
尝试在开始事务后,重新设置一下set names utf8mb4,如下:
DECLARE result_code INTEGER DEFAULT 0; — 定义返回结果并赋初值0
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET result_code=1; —
START TRANSACTION; — 开始事务
set names utf8mb4;
…
IF result_code = 1 THEN — 可以根据不同的业务逻辑错误返回不同的result_code,这里只定义了1和0
ROLLBACK;
ELSE
COMMIT;
END IF;
竟然成功了,呵呵,太厉害了,竟然让我猜出来了!
最后,还是看看我开发的“短信定时提醒”小程序,你也可以做的更好,扫码试一下,
你也可以做的更好!
还没有评论,来说两句吧...