Portál AbcLinuxu, 12. května 2025 12:43
Řešení dotazu:
collate
např: order by x collate utf8_czech_ci
show create table tabulka_s_jmeny
?
@mysql_query("SET NAMES 'utf8'", $this->_resource);v database.php, tak se celý web zobrazuje správně, jen jediný záznam, kterým jsem ručně přepsal v phpmyadmin je správně. Nevíte jak bych mohl celou databázi překódovat? Ani nevím v jakém kódování jsou tam ta data opravdu nahrána :(
mysql> show create table jos_datsogallery_catg; +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | jos_datsogallery_catg | CREATE TABLE `jos_datsogallery_catg` ( `cid` int(11) NOT NULL auto_increment, `name` varchar(255) collate utf8_czech_ci NOT NULL, `parent` varchar(255) collate utf8_czech_ci NOT NULL default '0', `description` text collate utf8_czech_ci, `ordering` int(11) NOT NULL default '0', `access` tinyint(3) unsigned NOT NULL default '0', `published` char(1) collate utf8_czech_ci NOT NULL default '0', PRIMARY KEY (`cid`) ) ENGINE=MyISAM AUTO_INCREMENT=64 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci | +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
Používám Joomlu verze 1.0.12, ta neumí uplně UTF-8, takže ikdyž je v konfiguraci nastavenou UTF-8 a zároveň je databáze také nastavena na UTF-8, tak Joomla i přesto data ukládá blbě v latin1. Viz tento odkaz ve kterém je to trochu objasněno.
Můj problém se týkal toho, že ač jsem používal řazení podle jména, tak se data obsahující některé speciální znaky (žčš atd..) řadila špatně, bylo to tím že v databázi byla opravdu uložena blbě.
Existují alespoň 2 řešení. První řešení je trochu pracne, ale asi funkčnější, implementovat v php řazení pomocí usort na již získaná dat z databáze. Druhé řešení je nastavit joomlu tak aby s databází opravdu komunikovala v UTF-8 a databázi převést, toto řešení jsem použil já.
Jak tedy na to? Není to žádná hračka, trvalo mi pár hodin, než jsem vygooglil správný postup.
mysqldump -u root -p --default-character-set=latin1 -c --insert-ignore --skip-set-charset dana_databaze > dump.sql mysql -u root -p --execute="DROP DATABASE dana_databaze;CREATE DATABASE dana_databaze CHARACTER SET utf8 COLLATE utf8_general_ci;" mysql -u root --max_allowed_packet=16M -p --default-character-set=utf8 dana_databaze < dump.sqlA pak už jen nastavit Joomlu tak aby komunikovala s databází v UTF-8, tj. odkomentovat ten jeden řádek v souboru includes/database.php
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.