Mám do MySQL databázy nahraný katalóg súčiastok, ktoré zobrazujem cez web rozhranie. Na stránkach sa zobrazujú jednak texty uložené v databáze ako aj texty uložené implicitne v php súboroch. PHP súbory boli editované textovým editorom a uložené v kódovaní utf8. Problém je, že pokiaľ nastavím vo web prehliadači kódovanie ako utf8, nezobrazí sa diakritika v textoch, ktoré pochádzajú z databázy. Texty z PHP súborov sú OK. Keď prepnem kódovanie na Stredoeurópske (ISO8859-2), texty z PHP súborov sú nezmyselné a texty z databázy sú OK. V phpAdmine mám nastavenú znakovú sadu v MySQL na utf8, jazyk a overenie MySQL spojenia sú utf8-slovak. Keď pozerám texty v databáze cez phpAdmin, zobrazenie diakritiky je OK. Nerozumiem prečo je tomu na stránke inak. Za odpoveď vopred ďakujem Mi.Ko.
No nezabralo to, ale zaujalo ma, že url v mojom phpAdmine vyzerá nasledovne:
https://www.webzdarma.cz/mysql/index.php?lang=sk-utf-8&server=1&convcharset=iso-8859-2&collation_connection=utf8_slovak_ci,
ale zaujala ma tam tá premenná convcharset, ktorá je nastavená na iso-8859-2 pokiaľ lang a collation_connection sú správne.
Texty do databáze musíš uložit znovu ve správném kódování.
Ono je to asi 20000 údajov. Importujem ich z .sql súborov. Tabuľka je jednoznačne vytvorená v kódovaní utf8.
CREATE TABLE `product` (
`idproduct` int(11) NOT NULL AUTO_INCREMENT,
`label` varchar(30) DEFAULT NULL,
`description` varchar(45) DEFAULT NULL,
`BrandCode` varchar(45) NOT NULL,
`is_visible` bit(1) DEFAULT NULL,
PRIMARY KEY (`idproduct`),
KEY `PBrandCode` (`BrandCode`)
) ENGINE=InnoDB AUTO_INCREMENT=4030 DEFAULT CHARSET=utf8;
riadky
/*!40101 SET NAMES utf8 */;
/*!40101 SET character_set_client = utf8 */;
sú označené ako komentár, ale majú na niečo vplyv?
Doma na počítači mi beží aj MySQL, aj Apache a tú istú stránku z tých istých dát v databáze vidím pri nastavenom kódovaní utf8 prehliadača úplne normálne.
Predbežne som to riešil tak, že som použil php funkciu iconv:
$newtext=iconv("ISO-8859-2", "UTF-8", $text);
Aj keď asi systémové riešenie to nie je.
SET NAMES utf8; musí být prvním příkazem při každém otevření databáze MySQL. Jinak si DB myslí, že s ní chceš komunikovat švédsky.
Dá se to změnit v konfiguraci serveru, ale skoro nikdo to nedělá. Dávám to jako další parametr při otvírání DB, abych ušetřil jeden příkaz, ale hlavně abych na tuto banalitu nezapomněl.