MySQL - Diakritika
Zdravím,
mám PHP script, kterým do DB ukládám string. Jedná se o "český" string, kde jsou háčky a čárky. Do DB se mi místo háčků a čárek ukládají nějaké "nesmysly". Při selectu z DB na web, tak na webu vidím zase hezky pěkně "české" stringy s diakritikou. Kódování v PHP souboru mám UTF-8, DB mám utf8 + utf8_czech_ci, tabulku, a fild tabulky taky. Nevadilo by mi to, ale jde mi o to, že chci teď udělat vyhledávač, který bude vyhledávat ve všech stringách uložených v desítkách řádcích, tak mi to nebude fungovat.
Když bude uživatel hledat záznam, kde je slovo např. slovo "pařba". Tak se provede:
SELECT * FROM tabulka WHERE text LIKE '%pařba%';
Problém nastává tehdy, že v DB jsou "nesmysly" a není tam nikde slovo "pařba", protože "Ř" není uloženo. Ale pokud si to vypíšu pomocí PHP, tak na webu se mi z těch "nesmyslů" složí zase diakritika.
Nějaké návrhy na řešení ? Děkuji.
- Ono, znaky, carky hacky(specialni znaky) se moc nedoporucuji pouzivat,,,,
Pokud ukládáš články do DB a potom je z ní vypisuješ na WEB, tak se MySQL hodí. Snad existuje nějaké řešení, pomocí kterého budu moci hledat slovo ve stringách.
to platilo za krále klacka. Je i soubor php ve správném k´odování UTF8?
Na základe čoho si určil, že sa ti do databázy ukladajú nezmysly? Ten select ti nefunguje, keď ho spúšťaš v svojej PHP aplikácii?
Klient komunikuje s databázou v nejakom kódovaní, ktoré môžeš nastaviť napríklad pomocou funkcie mysqli::set_charset.
Zkusil jsem nastavit charset, ale pořád špatně. Podle čeho jsem to určil ? Podle tohoto.
Do input text na WEBu napíšu:
Když se to uloží do DB, tak vidím v Navicat:
A když selectnu z DB ten odstavec <p>, tak na webu vidím:
daj sem script vytvorenej tabulky (create table ... )
a este sem daj prikaz akym zapisujes do DB.
Create Table:
Insert to table:
Při vytvoření připojení s DB:
Ku CREATE TABLE:
- Znakovú sadu pre stĺpec autor si chcel asi ponechať tiež na DEFAULT, t.j. vôbec ju tam nemusíš definovať.
- Dátový typ stĺpca autor by nemal byť TEXT, ale skôr VARCHAR.
A drobnosti:
- Aj keď číslo v zátvorkách za INT nemá veľký význam, tak je trochu nezvyčajné používať INT(255), obvykle sa používa INT(11).
- Pre stĺpce nazev_clanku a obsah_clanku nemusíš definovať COLLATE, pretože sa použije to, čo si definoval ako DEFAULT.
Ku INSERT príkazu:
Prečítaj si niečo o SQL injection.
K nastavovaniu charsetu:
Stačí zavolať funkciu mysql_set_charset (a je to tak aj lepšie).
Díky moc, už jsem problém vyřešil.
To co ty vidíš v SQL Insert, jsou proměnné, které jsou inicializováný přes "mysql_escape" a POST dat. :)
Díky moc
Skús sa zamyslieť, že odkiaľ sa tam zobrali tie HTML značky <p> a </p>. Tam zrejme bude tvoj problém.
Ty značky jsou tam z HTML editoru online.
Nielen tie značky, ale aj tie nezmysly. Tvoje možnosti sú:
1. Zistiť, či tvoj HTML editor umožňuje, aby nenahrádzal diakritiku nezmyslami.
2. Opravovať nezmysly z toho editora na serveri.
3. Použiť iný HTML editor, ktorý neposiela nezmysly.
4. Nepoužiť žiaden HTML editor.
Tvoj problém vôbec nesúvisí s kódovaním v MySQL.
Díky moc, pomohl jsi mi. Problém byl opravdu v HTML editor.
Nie je za čo.
Máš pravdu, všechno co jde mimo ten HTML editor, přímo z input text, tak to do DB zapisuje krásně česky. Už jen zlobí ten HTML editor. Díky moc za radu.
to je zase jiná, věc, ale je to prasárna, data se mají ukládat ve své "přirozené formě".
Môžeš byť trochu konkrétnejší? Používateľ vloží naformátovaný text v HTML formáte a do databázy sa to má vložiť v akej prirodzenej forme, aby to nebola prasárna?