首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中将汉字插入mysql时的UnicodeEncodeError

在python中将汉字插入mysql时的UnicodeEncodeError
EN

Stack Overflow用户
提问于 2016-04-14 23:01:23
回答 1查看 1.6K关注 0票数 0

我正在使用优美汤从一个中文网站刮中文文本,我试图将我刮到的字符串通过python中的MySQLdb插入mysql数据库。但是我在执行查询时遇到了UnicodeEncodeError。守则如下:

代码语言:javascript
复制
movie_name_fail = my_beautifulsoup_object.find("div").text
my_cursor.execute("INSERT INTO MOVIE_TABLE VALUES(%s)",movie_name_fail)

它给了我一个错误:

代码语言:javascript
复制
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-7: ordinal not in range(256)

但当我做的时候

代码语言:javascript
复制
print movie_name_fail

汉字可以很好地打印出来。我已经宣布

代码语言:javascript
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-

作为我的python源文件的编码,但是它没有工作。但是,当我将相同的汉字直接输入到文本编辑器(我使用的是崇高文本)时,工作得很好,我可以将它插入mysql并在mysql控制台中正确地显示它(我已经将mysql中的表的字符集设置为utf8):

代码语言:javascript
复制
movie_name_success = "超人总动员"
my_cursor.execute("INSERT INTO MOVIE_TABLE VALUES(%s)",movie_name_success)

我不知道为什么会发生这个错误,以及它是如何工作的。我真的很感谢你的帮助。

更新

我的python版本是2.7.8,MYSQL版本是5.7.11

我将源代码推送到github,它应该能够再现第117行的错误:"db_cursor.executemany(insert_sql,movie_tuple_list)“

scraper.py

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 20:16:30

在执行替换时,Python构造会添加引号吗?它需要。

您为连接建立了utf8mb4吗?

是表/列CHARACTER SET utf8mb4

更多Python注释

我建议使用utf8mb4代替utf8,因为中文有一些字符需要4个字节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36635495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档