猿人学 mysql 爬坑指南

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() //返回单个值

或者将表名和列名写清楚

你可能感兴趣的:(猿人学 mysql 爬坑指南)