1

我想讓我們MySQLdb連接到我的MySQL數據庫。當我使用像「fred」這樣的有效mysql用戶名時,一切都按預期工作,但當我嘗試使用有效的mysql unicode用戶名,數據庫或密碼(如「大な」)時失敗。如何使用unicode用戶名,密碼,數據庫使用MySQLdb?

誰知道如何使用帶有可能的unicode字符的MySQLdb?令人驚訝的是,當我使用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

作爲一個側面說明 - 主機名,顧名思義,不能包含Unicode字符。它們僅限於ASCII字母數字字符和連字符。 – duskwuff

+0

感謝duskwuff ......至少我不必試圖創建那個測試用例。 :) – panofish

回答

0

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() 
相關問題