gpt4 book ai didi

python - 如何将 MySQLdb 与 unicode 用户名、密码、数据库一起使用?

转载 作者:行者123 更新时间:2023-11-30 23:01:32 26 4
gpt4 key购买 nike

我正在尝试使用 MySQLdb 连接到我的 MySQL 数据库。当我使用有效的 mysql 用户名(如“fred”)时,一切都按预期工作,但当我尝试使用有效的 mysql unicode 用户名、数据库或密码(如“大な”)时失败。

谁知道如何将 MySQLdb 与可能的 unicode 字符一起使用?

令人惊讶的是,当我使用 mysql.connector 而不是 MySQLdb 时,我可以在我的数据库、用户和密码中使用日文字符进行连接(目前还无法使用日文字符测试主机名)。我很乐意使用 mysql.connector,但我还有另一个问题(请参阅 mysql.connector bug?)

def fix(string):
string = unicode(string) # convert qstring from pyqt ui to unicode string
string = string.encode('utf-8')
return string

try:
db = MySQLdb.connect(host=fix(hostname), user=fix(username), passwd=fix(password), port=int(port), charset="utf8", use_unicode=True)
except MySQLdb.Error, e:
errno = e.args[0]
err = e.args[1]

reply = QtGui.QMessageBox.critical(self, "MySQL Connect Failed", err.decode("utf8"))
return

编辑:我能够解决 mysql connector bug所以我将使用 mysql.connector 而不是 MySQLdb,但这个问题仍然有效。

最佳答案

connect 方法中的charset 选项在连接建立后 更改字符集。如果您需要 Unicode 来建立连接(例如,因为用户名和/或密码包含 unicode 代码点),那么可以使用 read_default_file 选项。

mycnf.cnf的内容:

[client]
default-character-set=utf8mb4

然后在 Python3 中(最好使用 mycnf.cnf 文件的绝对路径):

#!/bin/python3

import MySQLdb

user="some name with unicode codepoints"
passwd="unicode password"
db = MySQLdb.connect(
host="127.0.0.1",
user=user, passwd=passwd,
charset="utf8mb4",
read_default_file="./mycnf.cnf")

print("db:", db)

db.close()

关于python - 如何将 MySQLdb 与 unicode 用户名、密码、数据库一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762516/

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