經測試,我們的開發環境解決中文字元問題的解決辦法是同一到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 即較大的二進位制物件 還有...