我正在尝试将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,但这个问题仍然有效。
答案 0 :(得分:0)
{/ 1}}方法中的charset
选项会在建立连接后更改字符集。如果您需要Unicode来建立连接(例如,因为用户名和/或密码包含unicode代码点),那么可以使用connect
选项。
mycnf.cnf的内容:
read_default_file
然后在Python3中(更好地使用[client]
default-character-set=utf8mb4
文件的绝对路径):
mycnf.cnf