web.py在SAE写入emoji表情

emoji表情需要数据库支持宽字符,只能创建独享型数据库,创建时数据库的排序规则需要选择utf8mb4,见图:

创建数据表的时候也得选择相同的字符集,见图:

在连接时,需要使用utf8字符集,连接成功后再设置为utf8mb4:

class Input:  
    def GET(self):
        return render.input()

    def POST(self):
        data = web.input()
        db = web.database(dbn='mysql', host='bdvhedkiqldg.mysql.sae.sina.com.cn', port=10115, db='test2', user='用户名', pw='密码', charset='utf8')
        db.query("SET names utf8mb4")
        results = db.query("INSERT INTO test(text)VALUES('%s')"%(data.key2))
        return render.out(data.key2)

测试的数据表结构:

CREATE TABLE IF NOT EXISTS `test` (  
  `id` int(11) NOT NULL,
  `text` varchar(300) COLLATE utf8mb4_unicode_ci NOT NULL,
  `timeline` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='测试emo';