微信小程序开发系列(五)——小程序中存储emoji表情符

我的小程序整个架构是 app+ asp.net + mysql 

因为在“短信定时提醒”中的“随手记”里想存储表情符,所以还是经过了一番折腾的。

首先上网查遍了emoji表情符的设置方法,参见以下链接文章

http://www.voidcn.com/article/p-adfpcope-bro.html

网上介绍的所有方法都是告诉你字符要从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;

竟然成功了,呵呵,太厉害了,竟然让我猜出来了!

最后,还是看看我开发的“短信定时提醒”小程序,你也可以做的更好,扫码试一下,

你也可以做的更好!

本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院