2017-02-02 1 views
0

Ich habe eine Zeichenfolge zu speichern, die Use O Mozilla Que Não Trava! Testei! $vip ou $apoioDer Versuch, Sonderzeichen in MySQL DB

wie diese aussieht, wenn ich versuche, es zu meiner Datenbank zu speichern mit ...SET description = %s... und cursor.execute(sql, description) es mir ein Fehler

Warnung gibt: (1366, „Falscher String-Wert: '\ xF0 \ x9F \ x94 \ xB4Us ...' für die Spalte 'Beschreibung' ...

Angenommen, dies ein ASCII-Symbol ist, habe ich versucht, description.decode('ascii') aber dies führt zu

Objekt ‚str‘ hat kein Attribut ‚decode‘

Wie kann ich feststellen, was es codiert ist und wie könnte ich speichere so etwas in die Datenbank? Die Datenbank wird utf-8 codiert, wenn dies wichtig ist.

Ich benutze Python3 und PyMySQL.

Alle Hinweise erwünscht!

Antwort

0

Zuerst müssen Sie sicherstellen, dass die Tabellenspalte korrekte Zeichensatzeinstellung hat. Wenn es "latin1" ist, können Sie keinen Inhalt speichern, der Unicode-Zeichen enthält.

können Sie folgende Abfrage verwenden, um den Spalt Zeichensatz zu bestimmen:

SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='your_database_name' AND TABLE_NAME='your_table_name' AND COLUMN_NAME='description' 

Nach Mysql Dokument here, wenn Sie Spalte Zeichensatz geändert werden sollen.

Sie müssen auch sicherstellen, dass der Zeichensatz für die Mysql-Verbindung richtig konfiguriert ist. Zitat von Mysql doc:

Zeichensatz Fragen nicht nur die Datenspeicherung beeinflussen, sondern auch Kommunikation zwischen Client-Programmen und dem MySQL-Server. Wenn Sie möchten, dass das Clientprogramm mit dem Server über einen Zeichensatz kommuniziert, der sich vom Standard unterscheidet, müssen Sie angeben. Um zum Beispiel die UTF-8-Unicode-Zeichensatz zu verwenden, die Ausgabe diese Aussage nach der Verbindung zum Server:

SET NAMES 'utf8'; 

Sobald Zeichensatz richtig eingestellt ist, können Sie Ihre SQL-Anweisung auszuführen. Es ist nicht notwendig, in Python-Seite zu codieren/dekodieren. Das wird für verschiedene Zwecke verwendet.

+0

Die erste Abfrage gibt 'utf8' ich mit pyMysql init mit' verbinden = pymysql.connect (host = constants.HOST, user = constants.USERNAME, password = constants.PASSWORD, db = constants.DATABASE, charset = 'utf8', port = Konstanten.PORT, cursorclass = pymysql.cursors.DictCursor) 'Also sollte es eigentlich kein Problem geben? – PrimuS

+0

@PrimuS Gerade bemerkt, dass es ein Emoji gibt. Sie benötigen utf8mb4 für den Spaltenzeichensatz. utf8 ist nicht genug. Siehe http://stackoverflow.com/questions/35125933/mysql-utf8mb4-errors-when-saving-emojis – jiulongw