Portál AbcLinuxu, 10. května 2025 12:28
>>> db = MySQLdb.connect(host="", db="", user="", passwd="")
>>> c = db.cursor()
>>> c.execute("""INSERT INTO tabulka (nazev) VALUES (%s)""", ('č',))
1L
>>> c.execute("""INSERT INTO tabulka (nazev) VALUES (%s)""", ('ň',))
1L
No a do databaze se mi misto 'č' uloží nějaký paskvil. Při čtení totiž dostanu:
>>> c.execute("""SELECT * FROM tabulka""")
2L
>>> rows = c.fetchall()
>>> print rows
(('\xc4?',), ('\xc5\x88',))
Na první pohled je zřejmá chyba. Z nějakého záhadného důvodu se mi třeba při set character_set_results=latin1; zobrazuje v MySQL consoli dobře aspoň to 'ň', ale misto 'č' jen malý čtvereček.
Ví někdo jak z toho ven?
c.execute("""SET CHARSET utf8;""")
c.execute("""SET NAMES utf8;""")
c.execute("""SET COLLATION_CONNECTION='utf8_czech_ci';""")
a už to jede. (I když ty středníky by tam nemusely bejt... typický příznak copy-paste.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.