[Offtopic]Întrebare MySQL – probleme cu VARCHAR

M-am lovit de o problemă stranie, căreia nu-i găsesc o explicație logică. Am un tabel cu un câmp setat pe VARCHAR(45). Valorile din acest câmp conțin diacritice. În baza de date, ele apar corect. Când le „scot” din baza de date cu php, ele nu sunt arătate (apare ? în locul caracterului respectiv). Dacă schimb în TXT sau TINYBLOB, caracterele românești apar corect. Colajul bazei de date este UTF-8, setul de caractere al paginii php este UTF-8. Interesant este că pe local, funcționează OK. Problema este clar de la baza de date (am testat fonturi diferite, ca să exclud o eroare de font). Versiunea locală este 5.6.16, versiunea de pe server este 5.5.19 (nu risc momentan să fac update la versiunea de producție). Din ce m-am uitat pe documentație, nu văd nimic care să justifice un astfel de comportament. Idei?

7 Comments

    • @All

      thanks, rămăsesem dator cu rezolvarea, dar m-am luat cu altele. Într-adevăr, conexiunea se făcea pe default charset latin 1 și mai era o variabilă, n-am reținut care, tot pe latin1. Am rezolvat problema forțând totul la UTF-8 și acum e OK.

  1. Combo

    Vezi să fie și conexiunea client cu vârste utf8.

    • Combo

      Vroiam să zic charset: )

  2. petrescs

    Posibil ca cele doua versiuni de server (local/productie) sa aiba default character set diferite.
    Se poate verifica tabela respectiva intr-un dump (sau din promptul mysql cu ceva gen „show create table XYZ” sa arate default charset=utf8).
    Sunt mai multe tipuri de colaje utf8 (utf8_general_ci, utf8_bin, utf8_romanian_ci, utf8_unicode_ci), s-ar putea verifica si asta cu „show full columns from XYZ”.
    E ciudat sa „mearga” ok pe alte tipuri de date mai putin varchar.
    Daca in serverul mysql e totul ok, probabil problema e in php, aici nu mai stiu.

    • Baza de date a fost creată pe local și ulterior exportată pe server cu un dump într-un singur fișier, deci, ce este pe local este identic cu ce este pe server (tabele, colatii. default charset…).

      A, și versiunile de php sunt diferite 🙂

      • petrescs

        Nu am alte sugestii, sorry. Doar ca, fiind versiuni de server diferite, e posibil sa fie ceva valori implicite tratate diferit. ” show session variables like ‘char%’ ” respectiv ‘like coll%’ ar trebui sa lamureasca daca sunt identice pe ambele masini (local vs productie).
        Altfel, si in php pot aparea unele diferente – din phpinfo parca se poate vedea valoarea default_charset. Succes!

Comments are closed