2012-08-31 56 views
3

我在我的Python代碼中使用一個名爲Storm的活動記錄來檢索MySQL數據庫上的一些記錄。python enconding mysql

問題是:我的表在'utf8_unicode_ci'中,但是當我檢索到對象時我得到'latin-1'屬性,所以我需要做object.attr.decode('latin-1')。encode ('utf-8'),這並不總是有效 - 拋出一些例外。

我的問題:這是一個python行爲?一個MySQL的行爲?與風暴有關的東西?

代碼:

Storm.conn(user=db_user,db=db_name, passwd=db_passwd) 
events = Event.select('*',status='=2',date_end='>=NOW()') 
for event in events: 
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") 
    try: 
     #here we need only utf-8 strings 
     conn.index({"title": event.get_title(), "local": event.get_local(), "url": event.getUrl(), "description": event.get_description(), "artists": event.get_artists(), "tags": event.get_tags(), "picture": event.get_Picture(), "type": event.get_type(), 'date_begin': event.get_date_begin(), 'date_end': event.get_date_end(), '_ttl': event.get_ttl()}, "wf", "event", event.id) 
     print 'Indexed - '+now+': '+str(event.id) 
    except Exception,error: 
     print 'Error - '+now+': '+str(event.id)+" - "+str(error) 
+0

「#我們只需要utf-8字符串」你剛剛失去了遊戲。 **始終使用'unicode's。** –

+0

@ IgnacioVazquez-Abrams UTF-8不是Unicode? http://en.wikipedia.org/wiki/Unicode – thalesfc

+0

不,它不是。它**尤其**與'unicode'無關。 –

回答

2

不知道有關的細節你堆棧,但是在MySQL中,您需要獨立於表格的編碼設置連接的編碼。我有一些unicode表,我花了很長時間才意識到連接設置爲latin-1,所以我的unicode數據被解釋爲Latin-1字節,並在遠端「轉換」爲無意義的unicode。

+1

事實上它的工作:d 更改: Storm.conn(用戶= DB_USER,DB = DB_NAME,passwd的= db_passwd) 到 Storm.conn(用戶= DB_USER,DB = DB_NAME,passwd的= db_passwd, charset =「utf8」,use_unicode = True) 使它工作。謝謝亞歷克西斯:D – thalesfc

1

也許這個答案似乎是愚蠢的,但儘量在你的PY文件的頂部打印此 解釋路徑之後

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
+0

有沒有這樣的事情愚蠢的答案:D 但我們的代碼已經有這個頭。不管怎麼說,還是要謝謝你。 – thalesfc