通用技术 flask_sqlalchemy_mysql 插入表情符号报错处理

JoyMao · 2022年08月15日 · 3140 次阅读

测试用例工具是 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'))

现在可以安心插入表情符号了:

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册