Jestem bardzo zdezorientowany i zaintrygowany tym, jak przechowuję w nich ciągi zawierające nietypowe znaki (do kogoś, kto jest przyzwyczajony do angielskiego zestawu znaków w Wielkiej Brytanii).Jak poprawnie wstawiać znaki utf-8 do tabeli MySQL używając python
Oto mój przykład.
mam tę nazwę: Bientôt l'été
ten sposób tworzę tabelę:
CREATE TABLE MyTable(
'my_id' INT(10) unsigned NOT NULL,
'my_name' TEXT CHARACTER SET utf8 NOT NULL,
PRIMARY KEY(`my_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Używanie tego uproszczonego skrypt Pythona próbuję wstawić ciąg do bazy danych MySQL i tabela:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb
mystring = "Bientôt l'été"
myinsert = [ { "name" : mystring.encode("utf-8").strip()[:65535], "id" : 1 } ]
con = None
con = MySQLdb.connect('localhost', 'abc', 'def', 'ghi');
cur = con.cursor()
sql = "INSERT INTO 'MyTable' ('my_id', 'my_name') VALUES (%(id)s, %(name)s) ; "
cur.executemany(sql, myinsert)
con.commit()
if con: con.close()
Jeśli spróbuję odczytać nazwę w bazie danych, zostanie ona zapisana jako: Bientôt l'été
chcę go przeczytać: Bientôt l'été
Jak mogę uzyskać skrypt Pythona/bazy danych MySQL, aby to zrobić? Myślę, że ma to coś wspólnego z zestawem znaków i sposobem jego ustawiania, ale nie mogę znaleźć prostej strony, która wyjaśnia to bez technicznego żargonu. Walczę z tym od wielu godzin!
Patrzyłem na to i widzę character_set_server
jest ustawiony jako latin1
ale nie wiem czy to jest problem i jak go zmienić:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
o ile wiem 'u "string"' jest jak określić ciąg w formacie utf8 –
Jeśli to jest Python 2, nie musisz * wywoływać 'kodowania()'. Używaj tylko tego, jeśli 'mystring' jest obiektem' unicode'. Ponieważ ustawiłeś kodowanie kodu źródłowego na UTF8, twoje 'mystring' jest * już zakodowane *. –