最近爬数据存储到mysql中,遇到一个棘手的问题,在中文字段存储的时候总是报错:
这个问题网上查了是编码的错误,自己也写代码测试了一下,果真如此,只要存储含有中文字段的时候,就会出现报错,而在英文状态下就不会出现这种错误,只恨mysql不是中国先开发的
下面展示一下我的测试代码:
import pymysql
import MySQLdb
name=["hello","hehe","liwang","念成"]
age=[20,30,50,25]
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='test', charset="utf8")
cursor = conn.cursor()
for i in range(0,len(name)):
sql="""insert into table_name(name, age) VALUES ("%s","%d")"""%(name[i],age[i])
cursor.execute(sql)
conn.commit()
cursor.close() # 关闭游标
conn.close() # 关闭连接数据库
起初我以为是pymysql这个包出现的问题,所以测试一了一下MySQLdb这个包,结果两个都出现同样的问题,当运行脚本的时候,再去查看一下表,除了中文,其他的都可以存进去,通过测试的方法确定了编码的问题:
修改mysql 的编码其实有很多种,我们可以先进入数据库中,查看数据库的编码:show variables like ‘character_set_%’; 通过这条语句可以查看,
数据库的编码在最初安装的时候默认为latin1,我是在window下面运行的,所以我会选择修改mysql 的配置文件my.ini 文件,因为这种方法可以永久改数据库的编码方式。我们可以从mysql 的安装位置中找到这个文件:
如果你的本地没有这个my.ini文件的话,可以看这篇文章:如何解决安装MySQL后没有 my.ini 本地配置文件
可以选择notepad++打开,在文件的这三个位置加上三行代码
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
character-set-server=utf8
不过修改了这个之后,下面路径也跟着修改一下,
一顿操作之后,再去重启mysql服务,结果其他的都可以改成utf8了这两个怎么也不生效,我在这个问题上面整整弄了一天。。。。
后来我发现,不能只修改这里的配置文件,还要去另一个文件夹中修改另一个my.ini文件,上面给的链接中有提到这个文件的位置在哪里,
这个隐藏文件下面我们需要修改mysql下面的my.ini文件,修改的方式跟上面的一样,然后我们再去重启mysql服务:
然后就可以看到编码已经成功修改了。
但是已经创建的表编码还是以前的,这个没办法,配置好编码后创建的表,编码方式都是支持中文存储的了,希望对遇到此类问题的小伙伴有所帮助。