测试用例工具是 flask_sqlalchemy+mysql 的,最近有用户发现测试用例(富文本)无法输入表情符号,输入就报错,查日志是 mysql 插入报错:是字符串非法。
mysql 库的字符串集是 utf8,sqlalchemy 的数据链接````SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:%s@xxx.xxxx.com:3306/xxx_testcase" % urlquote('xxxxx')
明显是那个表情符号的编码超过 mysql 的 utf8 范围了,网上搜索了一圈:mysql 的 utf8 是 3 字节,表情符是 4 字节(报错中能看出来),需改成 utf8mb4。
说明当时设计库表的时候,对 mysql 各种字符集了解不够。
进行如下处理,才消除那个错误:
1、修改数据库及对应表的字符集:
ALTER DATABASE [数据库名] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
ALTER TABLE [表名] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2、只改数据库发现依然报错,猜想 SQLALCHEMY 的链接也要强制指定字符集,所以改成如下:````SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:%s@xxx.xxxx.com:3306/xxx_testcase?charset=utf8mb4" % (urlquote('xxxxx'))
现在可以安心插入表情符号了: