2012-06-18 6 views
13

Ich entwickle eine ziemlich einfache Web-App mit Flask und MySQL.pyMySQL set connection Zeichensatz

Ich kämpfe mit Unicode. Benutzer fügen manchmal Zeug ein, das sie aus Word kopiert haben, und es fällt mit den alten intelligenten Anführungszeichen u'\u201c' um.

Ein wenig Nachforschung zeigt, dass die Verbindung, die ich zu MySQL habe, den Latin1 Zeichensatz verwendet (scheint, der Standard zu sein).

Wie kann ich für die Verwendung von Unicode für seine Verbindung angeben?

Ich benutze pyMySQL, die vorgibt, ein Drop-in Ersatz für MySQLdb zu sein. MySQLdb definiert eine set_character_set(self, charset) Funktion für connection Objekte, aber pyMySQL nicht (ich bekomme einen Fehler, wenn ich es versuche).

+0

Sie könnten eine rohe Abfrage für jede Verbindung versuchen, die Sie haben mit 'SET NAMES UTF8' –

Antwort

46

Ich arbeitete es aus, indem ich in der pyMySQL source stocherte (ich hatte versucht, aber konnte nicht den richtigen Platz finden!).

Sie können angeben, wenn Sie die Verbindung zu erstellen:

conn = pymysql.connect(host='localhost', 
         user='username', 
         passwd='password', 
         db='database', 
         charset='utf8') 

mein Problem gelöst.

+2

Ich versuchte, pymysql mit sqlalchemy zu verwenden, so war die Lösung für mich, die URL zu ändern: mysql + pymysql: // user_name @ hostname/datenbankname? charset = utf8mb4'; Diese Antwort hat sehr geholfen! –