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

时间:2014-05-20 14:25:41

标签: python mysql mysql-python mysql-connector mysql-connector-python

我正在尝试将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,但这个问题仍然有效。

1 个答案:

答案 0 :(得分:0)

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

mycnf.cnf的内容:

read_default_file

然后在Python3中(更好地使用[client] default-character-set=utf8mb4 文件的绝对路径):

mycnf.cnf