S příchodem verze 4.1 přinesla MySQL nový systém práce se znakovými sadami, kódováními a řazením. Je podrobně popsán v 9. kapitole MySQL manuálu, ale nikdo se zjevně nenamáhá si ho přečíst. Proto vzniklo tohle minifaq.
Za případné škody způsobené použitím těchto rad neručím :-).
Dotazy ohledně MySQL a češtiny můžete klást ve fóru o databázích na Builderu.
Znaková sada (kódování) | Řazení |
---|---|
Unicode (kódování UCS-2) | ucs2_czech_ci |
Unicode (kódování UTF-8) | utf8_czech_ci |
Windows CP1250 | cp1250_czech_cs |
ISO 8859-2 | latin2_czech_cs |
Kódování | SET NAMES příkaz |
---|---|
CP1250 | SET NAMES 'cp1250' |
ISO-8859-2 | SET NAMES 'latin2' |
UTF-8 | SET NAMES 'utf8' |
Kódování | metatag Content-Type |
---|---|
CP1250 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-1250" /> |
ISO-8859-2 | <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2" /> |
UTF-8 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
# -*- coding: cp1250 -*- import MySQLdb db=MySQLdb.connect(user='root', db="test") c=db.cursor() c.execute("SET NAMES 'cp1250'") c.execute("INSERT INTO cs VALUES ('čšřěšžířžčřířž')") c.execute("SET NAMES 'cp852'") c.execute("SELECT * FROM cs") for i in c.fetchall(): print i[0]
SELECT * FROM tabulka WHERE LOWER(sloupec) LIKE LOWER('Řetězec');nebo nastavte řazení, které velikost písmen ignoruje (tj. končí na _ci), buď pro daný sloupec, nebo jenom pro danou operaci — např.:
SELECT * FROM tabulka WHERE sloupec LIKE 'Řetězec' COLLATE utf8_czech_ci;
WHERE sloupec COLLATE cp1250_czech_cs LIKE 'řeka'Pokud chcete zachovat ignorování velikosti písmen, pak v souladu s předchozí radou se lze dobrat k něčemu jako:
WHERE UPPER(sloupec COLLATE cp1250_czech_cs) LIKE UPPER('řeka')
mysql_query("SET NAMES 'utf8'") or die('Could not set names'); mysql_query("INSERT INTO tabulka VALUES ('ř')");Pokud tento skript obsahující takovýto kód uložíme v kódování CP1250 místo UTF-8 ohlásí MySQL tuto chybu, neboť znak ř v CP1250 má kód 0xF8, který netvoří žádný platný znak v kódování UTF-8.
Jediný způsob, jak dostat do databáze HTML entity je je tam uložit. Jediný způsob, jak dostat do databáze HTML entity je je tam uložit. Jediný způsob, jak dostat do databáze HTML entity je je tam uložit.
Možná máte pocit, že se opakuji, ale někteří lidé tohle nepochopí ani na potřetí :-). Pokud jde o text napsaný v kódu stránky, může jít např. o špatně nakonfigurovaný HTML editor, pokud jde o text získaný z nějakého formuláře může jít např. o to, že daný znak se nenachází v kódování, které má stránka nastavena v metatagu Content-Type nebo HTTP hlavičce nebo není uvedeno vůbec.
WHERE UPPER(sloupec COLLATE cp1250_czech_cs) LIKE UPPER(CONVERT('řeka' USING cp1250))