UTF-8 a MySQL - problem so spravnym ukladanim textu

Sekcia: Programovanie 25.06.2009 | 18:03
Avatar stando Mandriva 2005 LE  Používateľ
Zdravim,

v Mysql som vytvoril databazu s kodovanim UTF-8. Mysql bezi pod linuxom, apache s php na tom istom linux stroji tiez.
Ked v nej vytvorim tabulku takisto s kodovanim UTF-8 a do nej vlozim cez phpmyadmin text v kodovani UTF-8, ktory obsahuje napriklad znaky ako je ö,Ö, tak tieto sa mi potom v aplikacii (oscommerce) zobrazuju zle - nie je tam ten znak, ale len znak s otaznikom. Haluz je ze oscommerce je nastaveny na UTF-8 - ked pozriem vo firefoxe, tak ten je tiez spravne na UTF-8. Ked to zeditujem vo firefoxe v oscommerce a dam tam spravny znak, tak zase v phpmyadmin vidim inu kombinaciu znakov (Niederösterreich) a nie spravny znak ö. V com je problem?

Ked to zhrnem - tak kazda aplikacia (phpmyadmin a oscommerce) vklada do databazy text nejako inak - ked vlozim v phpmyadmine, nezobrazi sa korektne v oscommerce a naopak. V oscommerce mam nastavene CHARSET na UTF-8. Ked skontrolujem vo firefoxe (cez View->Character Encoding) tak aj phpmyadmin aj oscommerce tam automaticky voli UTF-8. Neviem preco teda kazdy vklada text inak...
    • Re: UTF-8 a MySQL - problem so spravnym ukladanim textu 25.06.2009 | 18:21
      Avatar Milan Dvorský debian,mint kde,android  Administrátor
      vkladaj cez oscommerce a nevsimaj si, co je vidno v phpmyadmine. prvorady je vysledok na webe, nie? a inak by som kukol do opravneni, ci nemas nastaveny niekde skryte latin1_swedish ...
    • Re: UTF-8 a MySQL - problem so spravnym ukladanim textu 25.06.2009 | 21:22
      Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
      do akeho kodovania su ukladane data v phpmyadmine? (ladin1 alebo UTF8?)
      Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
    • Re: UTF-8 a MySQL - problem so spravnym ukladanim textu 25.06.2009 | 22:28
      Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
      stringove stlpce by mali vyzerat takto:

      v_nick varchar(32) character set utf8 collate utf8_general_ci not null,

      predtym nez vlozis data cez commandline mysql pouzi:

      set names "utf8";
      insert into ...

      V php takisto hned po pripojeni na db zavolaj

      mysql_query('set names "utf8"');

      V html nastav spravny content type do meta

      header('Content-Type: text/plain; charset=utf-8');

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

      Over to pomocou wget --save-headers

      Ak vsetko ok chyba je v oscommerce



      • Re: UTF-8 a MySQL - problem so spravnym ukladanim textu 26.06.2009 | 13:46
        Avatar stando Mandriva 2005 LE  Používateľ
        Diky za info. Vyzera to, ze to bude problem v oscommerce, nespravne vklada data. Urobil som zopar testov v command line a vyzera to na to ze v oscommerce budem musiet pridat

        mysql_query("SET NAMES 'utf8'");
        mysql_query("SET CHARACTER_SET_CLIENT=utf8");
        mysql_query("SET CHARACTER_SET_RESULTS=utf8");
        • Re: UTF-8 a MySQL - problem so spravnym ukladanim textu 26.06.2009 | 15:00
          Avatar Milan Dvorský debian,mint kde,android  Administrátor
          toto tam nebolo? som myslel, ze ano, preto som toto nepisal ako radu ...
        • Re: UTF-8 a MySQL - problem so spravnym ukladanim textu 23.10.2009 | 13:13
          Lukas   Návštevník
          Ahoj a prosim kde do oscommerce to mam vložiť lebo mam podobný problem.... dakujem
    • Re: UTF-8 a MySQL - problem so spravnym ukladanim textu 14.07.2009 | 13:01
      XTMadmin   Návštevník
      Ak chces spravne ukladat znaky typu "ľ,š,č,ť,ž,ý,á,í,é" a podobne, vytvor si skript cez PHP ktory ti to tam zapise, nie pisat to do DB rucne, priklad toho riadku co som napisal, takto vyzera ak ho prezeniem cez PHP, a ulozim do DB: "ľ,Å¡,č,Å¥,ž,ý,á,í,é" takze tak nejak, ak ti to pomoze tak :

      <form action="" method="POST">
      <label>Text na "preklad": </label>
      <input type="text" name="msg">
      <input type="submit" value="Uložit">
      </form>
      <?php
      if($_POST['msg']){
      mysql_query("INSERT INTO `tvoja DB`.`tvoja tabulka` (`nejaka_kolonka`) VALUES ('".htmlspecialchars($_POST['msg'])."',)");
      echo 'Zadali ste: '.$_POST['msg'];
      }
      ?>

      Eventuelne by ti to malo do DB zapisat to co si napisal do kolonky, ak si spravne zadas parametre ake pouzivas v tvojej DB coze nazov DB, nazov tabulky. Neboj sa aj mne trvalo kym som na to prisiel ;) ,
      Pre ine otazky mi pisni na mail xtm1@azet.sk

      XTMadmin

      PS: ten skript ktory som ti napisal som neskusal, takze neviem ci niekde nieje chybycka v uvodzovkach alebo podobne ;)