Portál AbcLinuxu, 27. dubna 2024 00:32


Dotaz: Jak na spravne kodovani v MySQL?

22.9.2007 14:21 f.Jonas
Jak na spravne kodovani v MySQL?
Přečteno: 3627×
Odpovědět | Admin
Dobry den. Hledam, zkousim, ale svuj problem ne a ne vyresit.

Prvni dotaz: Jake kodovani je spravnejsi pouzivat jestlize chci pracovat vyhradne z cestinou? Cp1250?

Druhy dotaz: Mam nastaveno v hlavicce HTML meta http-equiv="content-type" content="text/html; charset=windows-1250" Vsechna mozna porovnavani sem pak v PHPMyAdmin nastavil na cp1250_czech_cs

Kdyz se pokusim vlozit ceskou vetu do tabulky, v phpmyadminu je zobrazena spravne vzdy. Pokud se vsak ve sve aplikaci pokusim vypsat text v tabulce, objevi se na miste hacku a carek paznaky. Co delam spatne? Co a kde se ma nastavit?

Dekuji mnohokrat za pripadne odpovedi
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.9.2007 14:42 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Odpovědět | | Sbalit | Link | Blokovat | Admin
V čem aplikaci píšete, je to PHP? Pokud ano, zkuste přímo na serveru uložit text do souboru a zkontrolujte diakritiku.

Zkuste pak ještě přidat do PHP kódu toto:
header('Content-Type: text/plain; charset=windows-1250');
22.9.2007 14:43 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Pardon, takhle jsem to myslel:
header('Content-Type: text/html; charset=windows-1250');
22.9.2007 15:01 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Odpovědět | | Sbalit | Link | Blokovat | Admin
pozri tiez sem: http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
mess avatar 22.9.2007 16:49 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já používám toto (na UTF-8):
$conn = mysql_connect("server.tld","user","pwd");

$db = mysql_select_db("databaze",$conn);

#nastavíme si charsety na utf-8 ať to nedělá bordel
$sql = "SET character_set_client = utf8";
$result = mysql_query($sql, $conn);

$sql = "SET character_set_results = utf8";
$result = mysql_query($sql, $conn);

$sql = "SET character_set_connection = utf8";
$result = mysql_query($sql, $conn);
Analogický postup půjde aplikovat i na windows-1250.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
22.9.2007 18:43 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
ty si tiez pozri toto :) da sa to vsetko urobit jedinym dotazom
mess avatar 22.9.2007 19:50 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Vím, ale nevzpoměl jsem si, tak jsem to vytáhl z nějakého staršího skriptu. (Lepší výmluva mě nenapadla :-) )
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
22.9.2007 19:43 f.Jonas
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Dekuji za odpovedi. Mam na toto dotaz.

Zabralo mi toto: mysql_query("SET CHARACTER SET UTF8");

mysql_query("SET NAMES SET UTF8");

najednou to funguje. Zajima me jak to funguje? Znamena to, ze je pro cestinu fuk jestli pouziju cp1250 nebo utf8 a ze chyba, ktera zpusobila spatne zobrazeni diaktitiky byla zpusobena tim, ze php s mysql nevedelo bez SET CHARACTER a SET NAMES, jake volit vysledne kodovani??
22.9.2007 19:48 f.Jonas
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
vpodstate nerozumim jak je vse provedeno fyzicky. Moje predstava je takova, ze v phpmyadminu si nastavim kodovani v jakem chci ukladat data. Pak mam HTML stranku, ktera ma take nejak nastaveno kodovani. A pak je tu souhra PHP s MySQL, kde je potreba jeste explicitne nastavovat, o jaka data zadam.

to jest:

mysql_query("SET CHARACTER SET UTF8"); mysql_query("SET NAMES SET UTF8");

Je moje predstava o fungovani toho systemu spravna? Pokud ne, mate nekdo odkaz na nejlepe cesky text vysvetlujici vse? Nejde mi jen o to, ze mi to uz funguje, ale ja potrebuju vedet jak:)
22.9.2007 20:17 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Každá databáze, tabulka, sloupec (dále jen databáze) má v MySQL přiřazeno kódování / znakovou sadu (dále jen kódování), ve které ukládá příslušná data. Současně s kódováním se volí i algoritmus řazení (collation).

Klient deklaruje příkazem SET CHARACTER SET v jakém formátu je ochoten data přijímat a v jakém je odesílá. MySQL se pokusí data překódovat z/do kódování databáze.

Z pohledu PHP získáváte z databáze jen posloupnost bytů a je na vás, co s ní provedete.

1. Pokud k tomu nemáte zvláště významný důvod, používejte kódování UTF-8. 2. Jestliže nepotřebujete kompatibilitu s verzemi PHP staršími než 5, používejte mysqli.
22.9.2007 20:54 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
MySQL server proste nema odkial vediet, v akom kodovani mu data posles (a naopak, v akom ich chces od neho prijat), pouzije defaultne nastavenie. dotazom 'set names' mu presne povies, co a ako chces, je doslova nutnost toto pouzivat. vela PHP aplikacii sa spolieha na default nastavenie (alebo ich autori toho vela o kodovani nevedia) a potom je s nimi dost velky problem, ked je default nieco ine, ako mal nastavene autor. mimochodom, 'set character set' je zbytocny ak pouzijes 'set names'.
22.9.2007 23:06 f.Jonas
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Aha diky. Cili rikas, ze neni dobre spolehat na defaultni nastaveni a radeji prikaz SET NAMES provest, protoze tim nic nezkazim, ze?

V tuto chvili dle vasich rad mam nastaveno v HTML strance kodovani utf-8, tabulky v mysql jsou utf8_czech_ci , a volam jeste ty SET NAMES, SET CHARACTERS na utf8. Funguje mi to, ale presto se zeptam, zda jsem korektni? A kde popripade najdu konfiguraky s defaultnim nastavenim kodovani, marne to hledam.
22.9.2007 23:30 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Záleží na distribuci, locate php.ini.
23.9.2007 00:26 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
ako som ti uz napisal, 'set character set' volat nemusis, pretoze 'set names' robi aj toto. a 'set names' nevykonavas preto, ze tym nic nepokazis, ale pretom, ze sa to proste _ma_ robit. inak default kodovanie MySQL serveru zistis takto:
show variables like 'character_set%';
23.9.2007 01:06 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Mohu se zeptat, proč doporučujete SET NAMES 'utf8' namísto IMO lepšího SET CHARACTER  SET utf8, aneb jaké výhody spatřujete v přenastavení collation_connection na utf8_general_ci namísto použití původního řazení databáze? Dále bych vás požádal o odkaz do dokumentace, kde se píše, že SET NAMES se používat?

Jinak máte samozřejmě pravdu, nemá smysl používat oba příkazy hned za sebou, stačí si vybrat jeden.
23.9.2007 01:39 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
pardon, mas pravdu, lepsie je 'SET CHARACTER SET', vtedy davno, ked som si to pozeral, som to zrejme pozrel zle. v dokumentacii neviem ci to najdes avsak ak chces aby tvoje aplikacie fungovali vsade ok, tak to proste pouzit musis. pripadne sa mozes pridat k tym X ludom a produkovat aplikacie, s ktorymi je neustale problem (viz. velka kopa open source PHP veci). proste je to nutnost a zaciatocnici by sa mali naucit, ze to tam dat maju a usetrit tak pouzivatelom (a adminom) starosti.
Dalibor Smolík avatar 23.9.2007 01:55 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Avšak ani to mi nepomohlo, abych neměl řazení písmen A ..Z,Š,Ž místo aby Z bylo před Ž.
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
23.9.2007 03:04 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Proč by to nepomohlo? Teď už záleží pouze na tom, s jakým řazením je vytvořena databáze, tabulka či sloupec. Pokud bylo české, tak se to zobrazí ve správném pořadí.
Dalibor Smolík avatar 23.9.2007 13:51 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Databáze i tabulka byla vytvořena bez řazení. Ale pak jsem tabulku upravil příkazem alter table tel_seznam character set utf8 collate utf8_czech_ci
a změna proběhla OK. Ale změny v řazení se neprojevily ani po doplnění php skriptu
$sql = "SET character set utf8_czech_ci";
$result = mysql_query($sql, $connection);


Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
23.9.2007 14:19 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Příkaz, jak je zapsán, musel skončit chybou na neznámém kódování. Jaký je výstup následující sekvence?
  1. USE db;
  2. SET character set utf8;
  3. SELECT @@collation_database, @@collation_connection;
Důležité je, aby byla nejprve vybrána databáze (třeba přes API, nebo příkazem USE) a až poté nastaveno kódování.
Dalibor Smolík avatar 23.9.2007 14:52 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Ano, tady bude chyba. Pokud zadám příkaz show varibles, objeví se mi toto:
 collation_connection	 latin1_swedish_ci
 collation_database	 latin1_swedish_ci
 collation_server	 latin1_swedish_ci
Je nutné změnit kódování pro celou databázi? Díky
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
23.9.2007 15:28 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Mělo by stačit správné nastavení tabulky a sloupce. Co poví příkaz SHOW CREATE TABLE `tel_seznam`;? Mám podezření, že u sloupce zůstalo staré řazení. Pokud nemáte databázi ve švédštině, tak si změňte všude charset/collate na něco použitelnějšího, rozhodně tím nic nezkazíte.
Dalibor Smolík avatar 23.9.2007 17:47 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Show create table ukázalo toto:
telseznam | CREATE TABLE `telseznam` (
  `pismeno` char(1) character set latin1 default NULL,
  `nazevfirmy` text character set latin1,
  `FAX` text character set latin1,
  `TEL` text character set latin1,
  `poznamka` varchar(250) character set latin1 default NULL,
  `datum` date default NULL,
  `id` int(10) unsigned NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=961 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci |
Jinak mě zajímá sloupec "pismeno", u ostatních sloupců na tom nezáleží.
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
Dalibor Smolík avatar 23.9.2007 18:58 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Vyřešeno. Pomohlo nastavení sloupce.
alter table telseznam modify pismeno char(1) character set utf8 collate utf8_czech_ci
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
23.9.2007 03:00 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Nemusím! Mám k dispozici API funkci mysql_set_character_set(), kterou PHP implementuje jako mysqli->set_charset(). Použití tohoto API volání je IMO vhodnější a jednodušší. V manuálu sice píší, že se chová jako příkaz SET NAMES, ale zdá se, že ve skutečnosti se chová jako SET CHARACTER  SET, čemuž odpovídá i název. Bohužel nemám čas na důkladné pokusy.
23.9.2007 10:37 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
je sice pekne, ze MySQL poskytuje takuto funkciu vo svojom API, avsak PHP s tym robit nevie (aspon teda v dokumentacii nic take nevidim) takze sme zase tam, kde sme boli. okrem toho mas uplne jedno, ci zavolas tuto funkciu alebo vykonas jeden SQL dotaz - proste ide o to, ze _nieco_ musis urobit, aby to spravne fungovalo (je jedno, ktore z tychto dvoch). vacsina ludi nerobi nic a to je chyba.
23.9.2007 10:44 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
je sice pekne, ze MySQL poskytuje takuto funkciu vo svojom API, avsak PHP s tym robit nevie (aspon teda v dokumentacii nic take nevidim) takze sme zase tam, kde sme boli.
Druhý odkaz v mém příspěvku, nevede on do manuálu PHP, kde je popisována přesně taková funkce?
23.9.2007 10:58 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
ten odkaz som si nevsimol ale je bohuzial iba v mysqli. mimochodom, nechapem tieto narazky z tvojej strany, mne vobec nejde o to ako ten charset nastavis. proste ho treba nastavit a je jedno ako to urobis (obe moznosti su rovnako narocne a rovnako ucinne). nechapem preco to cele tahas to uplne inej roviny, ak si chcel upozornit, ze to je mozne urobit priamo z PHP, tak stacilo napisat nieco v zmysle 'len dodam, ze PHP na toto poskytuje priamo funkciu s nazvom ...' a nie takym utocnim tonom, akym si to zacal.
23.9.2007 11:54 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
ten odkaz som si nevsimol ale je bohuzial iba v mysqli.
Což nikterak nevadí, protože dodržovat kompatibilitu s PHP4 u nových projektů v drtivé většině případů nemá smysl. Přiznám se, že bych v PHP4 už asi „neuměl“ programovat. Všem bych doporučil používat objektové mysqli místo ostatních alternativ.
mimochodom, nechapem tieto narazky z tvojej strany, mne vobec nejde o to ako ten charset nastavis. proste ho treba nastavit a je jedno ako to urobis (obe moznosti su rovnako narocne a rovnako ucinne).
Protože tvrdíte, že něco musím, jinak že programuji, s prominutím, jako prase. Myslím si, že PHP/MySQL docela ovládám, takže se mě vaše poznámky dotýkají, když vím, že nemusím. Mimochodem, kódování PHP jako klienta lze nastavit i v php.ini či přes konfiguraci webseveru (např. .htaccess).
23.9.2007 12:46 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Protože tvrdíte, že něco musím, jinak že programuji, s prominutím, jako prase. Myslím si, že PHP/MySQL docela ovládám, takže se mě vaše poznámky dotýkají, když vím, že nemusím.
ale ty naozaj _musis_ :) bud ten dotaz vykonas sam alebo to za teba urobi PHP funkcia. kde je rozdiel ?
Mimochodem, kódování PHP jako klienta lze nastavit i v php.ini či přes konfiguraci webseveru (např. .htaccess).
mozes ale to bude zase len dalsia 'default hodnota' takze stale bez efektu pri inom kodovani.

proste ide o to (a zacina byt uz trapne, ze to nevies pochopit), ze to kodovanie sa nejakym sposobm _musi_ nastavit, inak to bude, ako si sam povedal, riadne prasacka robota.
22.9.2007 16:50 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ja osobne se MS kodovani vyhybam (pokud to aspon trochu jde), takze volim mezi utf-8 a iso-8859-2. Pokud lze, pouziju utf-8.

Dejv
Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
22.9.2007 19:38 bk
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
taktez s mysql a php pouzivam vyhradne utf a mam po problemech.
22.9.2007 20:52 f.Jonas
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
ok , dobra a jaky je rozdil mezi utf8_czech_ci , utf8_unicode_ci ? Cekal jsem, ze do utf8 se vejde vsechno od cestiny po japonstinu.
mess avatar 22.9.2007 20:58 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Je tam rozdíl ve způsobu řazení. S utf8_czech_ci se ti výsledné řádky seřadí tak, jak bys čekal v češtině, tzn. A,B,C,Č,D,Ď... S utf8_unicode_ci se ti seřadí takto: A,B,C,D,...Y,Z,Č,Ď... tzn. písmena s interpunkcí půjdou až na konec.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
22.9.2007 21:03 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Re: Jak na spravne kodovani v MySQL?
Ve způsobu řazení. Zkuste otevřít manuál.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.