MySQLdb訪問mysql的中文字元問題解決之道

2022-02-02 06:34:17 字數 1702 閱讀 8181

經測試,我們的開發環境解決中文字元問題的解決辦法是同一到utf-8編碼:

一、py原始檔採用utf8編碼,在檔案開始新增

#coding=utf-8

二、在使用mysqldb建立和mysql資料庫的連線並建立cursor物件時採用如下函式

def getconnection(self):

try:

host=self.getsetting('host')

user=self.getsetting('user')

passwd=self.getsetting('password')

port=self.getsetting('port',3306)

db=self.getsetting('database')

conn=mysqldb.connect(host=host,port=port,user=user,passwd=passwd,db=db

,cursorclass=mysqldb.cursors.dictcursor

,use_unicode=false, charset=self.dbcharset);

##do char magic

conn.set_character_set(self.dbcharset)

return conn;

except exception,ex:

print "connect mysql db failure! using settings: host=%s,user=%s,passwd=%s,port=%s,db=%s"%(host,user,passwd,port,db)

print ex;

def getcursor(self,conn):

cursor = conn.cursor();

cursor.execute('set names %s;' % self.dbcharset)

cursor.execute('set character set %s;' % self.dbcharset)

return cursor;

三、客戶端(瀏覽器)傳回的字元一律是採用utf8編碼

這一直都工作的很好,中文字元順利存入資料庫並可以讀取出來。直到有一天我們需要按照中文字段內容進行查詢,無論採用什麼手段,甚至在sql語句中直接寫入utf8的字元編碼,都不能獲取符合條件的資料,同樣的語句在管理工具中卻能順利的查詢出來資料!看來還是mysqldb傳遞過程中的問題,終於我看到了這兩行**

cursor.execute('set names %s;' % self.dbcharset)

cursor.execute('set character set %s;' % self.dbcharset)

當我注釋掉這兩行**之後,上帝啊,終於查到資料了!最終getcursor方法變成這個樣子:

def getcursor(self,conn):

cursor = conn.cursor();

#cursor.execute('set names %s;' % self.dbcharset)

#cursor.execute('set character set %s;' % self.dbcharset)

return cursor;

摒棄了任何額外的處理,至於為什麼,這篇文章和這篇文章說的很細緻,你可以研究一下,不過我是沒有想明白,明明都是同一的utf8編碼,是為什麼就不行呢?望達者不吝賜教。

MySQLdb訪問mysql的中文字元問題解決之道

經測試,我們的開發環境解決中文字元問題的解決辦法是同一到utf 8編碼 一 py原始檔採用utf8編碼,在檔案開始新增 coding utf 8 二 在使用mysqldb建立和mysql資料庫的連線並建立cursor物件時採用如下函式def getconnection self try host s...

mysql 命令操作mysql db

mysql 其實是乙個shell 命令,可以很好的操作db 特別是某些操作,需要用到mysql db的root許可權,加上又拉取不到root許可權的時候,直接使用mysql命令就是乙個非常好的工具。mysql help 檢視到所有的引數 引數的具體意思,我們自己看看就知道了。通過這個命令基本可以做操...

MySQLdb操作mysql的blob值

一般情況下我們是把儲存在檔案系統中,而只在資料庫中儲存檔案路徑的,但是有時候也會有特殊的需求 把二進位制存入資料庫。今天我們採用的是python mysql的方式 mysql 是支援把存入資料庫的,也相應的有乙個專門的字段 blob binary large object 即較大的二進位制物件 還有...