我正在ubuntu16.04.4上运行一个webapp。堆栈如下
python 3.5.2版
MySQL5.7.22版本
瓶
flask 炼金术
webapp有一个特性,管理员可以使用xlsx上传一些文本。在webapp中使用openpyxl读取的文件。但是,在保存时,会出现如下错误:
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (1366, "Incorrect string value: '\\xC4\\x9B nep...'
一开始,我可以删除那些制造麻烦的字符(例如零宽度的空白)。但现在我不能再这样做了。
读了一点在互联网上,我想可能是我的数据库没有使用utf8mb4。有人能让我更新数据库和它的所有表吗?因为我对sql之类的东西一无所知。由于webapp是在生产中使用的,我不喜欢尝试过时的教程。
1条答案
按热度按时间zlwx9yxi1#
似乎现在起作用了。我做了以下步骤:
启动mysql cli时使用:
mysql -u root -p
使用根pw登录。使用检查默认参数
show variables like "%character%";
这给了我:以及
show variables like "%collation%";
这给了我所以我编辑了
/etc/mysql/my.cnf
我补充说:重新启动mysql(
sudo service mysql restart
)执行上面的命令给了我和
所以我用
SHOW TABLE STATUS FROM databasename;
他们仍然使用类似latin1_swedish_ci
我使用以下方法更改数据库设置:ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
各表如下:再查一下表格的设置就知道
latin1_swedish_ci
现在改为utf8mb4_unicode_ci
然后我将sqlalchemy连接url改为?encoding=utf8mb4
最后。重新启动mysql和webapp。从那以后它就正常工作了。