Portál AbcLinuxu, 10. května 2025 14:23
header('Content-Type: text/plain; charset=windows-1250');
header('Content-Type: text/html; charset=windows-1250');
$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.
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:)
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.
locate php.ini
.
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 má používat?
Jinak máte samozřejmě pravdu, nemá smysl používat oba příkazy hned za sebou, stačí si vybrat jeden.
$sql = "SET character set utf8_czech_ci"; $result = mysql_query($sql, $connection);
USE db;
SET character set utf8;
SELECT @@collation_database, @@collation_connection;
USE
) a až poté nastaveno kódování.
collation_connection latin1_swedish_ci collation_database latin1_swedish_ci collation_server latin1_swedish_ciJe nutné změnit kódování pro celou databázi? Díky
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.
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ží.
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.
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?
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
).
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.