【问题标题】:Does the MySQLdb module in python returns utf8 encoding or unicode in this case?在这种情况下,python 中的 MySQLdb 模块返回 utf8 编码还是 unicode?
【发布时间】:2011-05-14 10:04:06
【问题描述】:

我使用 MySQLdb 连接到一个数据库,其中所有内容都以 utf8 编码存储。

如果我这样做

cursor.execute("SET NAMES utf8")

并通过另一条语句从数据库中获取一些数据。这是否意味着,在

cursor.execute("SELECT ...")
cursor.fetchall()

会是 unicode 吗?还是我必须先把它们转过来

mystr.decode("utf8")

转成unicode?​​p>

【问题讨论】:

  • 例如这个字符串repr("Naïve") 的结果是Na\xc3\xafve。你是这个意思吗?
  • 视情况而定。你是从数据库中得到的吗?
  • 是的,字符串"Naïve" 来自数据库。我抓住了它,就像我在上面的问题中解释的那样......

标签: python unicode encoding utf-8 mysql-python


【解决方案1】:

来自the docs

连接(参数...)
...

use_unicode

如果为 True,CHAR 和 VARCHAR 以及 TEXT 列将使用配置的字符集作为 Unicode 字符串返回。最好在服务器配置或客户端配置中设置默认编码(使用 read_default_file 读取)。如果在连接后更改字符集(MySQL-4.1 及更高版本),则需要在 connection.charset 中输入正确的字符集名称。

如果为 False,类似文本的列将作为普通字符串返回,但您始终可以编写 Unicode 字符串。

这必须是关键字参数。

【讨论】:

  • 我认为cursor.execute("SET NAMES utf8") 会确保数据库和脚本之间的所有字符串传输都在utf8 中。这是否意味着如果我执行cursor.execute("SET NAMES utf8") 并且我设置了关键字参数use_unicode,我的字符串将被抓取为utf8 并返回为unicode
  • 您可能还需要charset 参数。
猜你喜欢
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 2021-12-31
  • 2010-10-17
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多