flask_sqlalchemy 乱码问题

时间:2024-10-28 18:37:02

简言之, /etc/my.conf

default_character_set=utf8 配置成了 default_character_set=utf-8

继而 sqlalchemy 创建表使用的字符编码格式是 latin1, 如下

| log   | CREATE TABLE `log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`record_id` int(11) DEFAULT NULL,
`command` varchar(50) DEFAULT NULL,
`sn` varchar(50) DEFAULT NULL,
`hostname` varchar(100) DEFAULT NULL,
`idc` varchar(50) DEFAULT NULL,
`ip` varchar(50) DEFAULT NULL,
`iloip` varchar(50) DEFAULT NULL,
`result` text,
`req_time` datetime DEFAULT NULL,
`resp_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `record_id` (`record_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |

所以即使创建引擎时设置了character 为 utf8, 存储是也是乱码, 问题还是出在 mysql server 的配置.

SQLALCHEMY_DATABASE_URI = "mysql+pymysql://work:123456@localhost:3306/work?charset=utf8"

另外还要把已经建立的 database 的 character 也改成 utf8: alter database clubot character set utf8;

删掉了已有的表, 新建后 OK.