flask-sqlalchemy进行mysql数据库操作时,插入中文数据报错

在ubuntu系统下,当我要插入中文数据时,系统报错: Warning: (1366, "Incorrect string value: '\xD6\xD0\

在ubuntu系统下,当我要插入中文数据时,系统报错:

Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...'for column 'VARIABLE_VALUE' at row 345"

经查阅多方资料,发现是数据库编码问题,当mysql执行create database movie;操作时,默认编码是latin1,我们要改成utf8的。

于是进行了下述措施:

删掉之前建的数据库:drop database movie;
重建数据库:create database movie default character set utf8;
这样子做后,插入中文数据就不会报错了。

如果还报错,再继续下述操作:

  1. 将SQLALCHEMY_DATABASE_URI改成如下,注意加上?charset=utf8mb4
SQLALCHEMY_DATABASE_URI='mysql://[user_name]:[password]@[host]/[database_name]?charset=utf8mb4'
  1. db = SQLAlchemy(app)改成如下:
db = SQLAlchemy(app,use_native_unicode="utf8")

PS:

如果要让mysql执行create database 时默认编码改成utf8,可进行下述操作:

  1. cd /etc/mysql
  2. sudo vim my.conf
  3. 添加下述操作
[mysqld]
character_set_server = utf8
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
  1. 保存文件后退出。之后重启mysql服务:
service mysql restart
  1. 之后,登录mysql后再执行create database movie; 就默认编码是utf8了。

再PS:

登录mysql命令:mysql -u用户名 -p密码
退出登录:\q

如果上述表述有任何问题,欢迎提出指正!感谢!