lzma后的数据无法存储到mysql的varchar类型中,一开始以为是因为utf8不支持emoji表情字符,所以改用utf8mb4,需要修改mysql的配置文件才可以,网上很多教程都只更改character_set_database ,实测无用。需要更改 show variables like 'char%' 和 show variables like 'collate%'中的大部分内容才可以。
mysql的配置文件在/etc/mysql/my.cnf中,打开后,在里面添加 :
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
然后重启数据库 service mysql restart 最好在管理员模式下
改后数据库默认是utf8mb4类型,然后重新建数据库和表 create database 名称,
create table 表名(n1 l1,n2 l2....) engine=innodb default charset=utf8;
最后运行代码 发现依然无法存入数据。
检查发现,lzam压缩后的数据为二进制形式,但表中lzam为varchar,因此总是报错。后将lzam类型改为blob即可。
2019-12-5更新
在使用mysql语句时发现如下错误:
sql='select * from %s where %s=%s‘;
db.execute(sql,(a,b,c))
这样运行要么是错误的,要么是无数据。貌似表名和列名不能这样使用。
采用如下方法就为正确的:
sql='select * from %s where %s=%s‘ %(a,b,c)
db = pymysql.connect(**self._db_args)
db.autocommit(True)
cursor=db.cursor()
cursor.execute(sql)
return cursor.fetchall() //返回全部值
return cursor.fetchone() //返回单个值
或者将表名和列名写清楚