gpt4 book ai didi

python - 使用 Python 将 UTF-8 字符串写入 MySQL

转载 作者:IT老高 更新时间:2023-10-28 21:50:27 24 4
gpt4 key购买 nike

我正在尝试将用户帐户数据从 Active Directory 推送到我们的 MySQL 服务器。这完美无缺,但不知何故,字符串最终显示了变音符号和其他特殊字符的编码版本。

Active Directory 使用此示例格式返回一个字符串:M\xc3\xbcller

这实际上是 Müller 的 UTF-8 编码,但我想将 Müller 写入我的数据库而不是 M\xc3\xbcller .

我尝试用这一行转换字符串,但它在数据库中产生了相同的字符串:tempEntry[1] = tempEntry[1].decode("utf-8")

如果我在 python 控制台中运行 print "M\xc3\xbcller".decode("utf-8") 输出是正确的。

有什么方法可以正确插入这个字符串吗?我需要这种特定格式的 web 开发人员想要有这种确切的格式,我不知道为什么他不能直接使用 PHP 转换字符串。

附加信息:我正在使用 MySQLdb;表列编码为utf8_general_ci

最佳答案

正如@marr75 建议的那样,确保您在连接上设置了 charset='utf8'。设置 use_unicode=True 不是严格必要的,因为设置字符集暗示了这一点。

然后确保您将 unicode 对象传递给您的数据库连接,因为它将使用您传递给光标的字符集对其进行编码。如果你传递的是一个 utf8 编码的字符串,当它到达数据库时会被双重编码。

所以,类似:

conn = MySQLdb.connect(host="localhost", user='root', password='', db='', charset='utf8')
data_from_ldap = 'M\xc3\xbcller'
name = data_from_ldap.decode('utf8')
cursor = conn.cursor()
cursor.execute(u"INSERT INTO mytable SET name = %s", (name,))

您也可以尝试通过传递 init_command 参数来强制连接使用 utf8,但我不确定这是否需要。 5 分钟的测试应该可以帮助您做出决定。

conn = MySQLdb.connect(charset='utf8', init_command='SET NAMES UTF8')

另外,这几乎不值得一提,因为 4.1 太旧了,请确保您使用的是 MySQL >= 4.1

关于python - 使用 Python 将 UTF-8 字符串写入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6202726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com