Adaugare diacritice in MySQL

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje: 328

Adaugare diacritice in MySQL

In cererea catre baza de date pentru a afisa rezultatele si pentru a adauga in baza de date am si linia de cod:

Cod: Selectaţi tot

mysql_set_charset('utf-8');
In pagina web imi afiseaza cu diacritice rezultatele, dar in baza de date nu adauga diacriticele cum trebuie.
De exemplu:
in formularul de adaugare scriu : am reuşit sa adaug
in pagina de afisare apare cu diacritice
dar in baza de date apare asa: am reuÅŸit mah

MarPlo
Salut
In scriptul PHP trebuie sa ai urmatorul cod inainte de adaugare date in mysql:

Cod: Selectaţi tot

header('Content-Type: text/html; charset=utf-8');
Si incearca acest cod pt. setare UTF-8 la conexiunea cu mysql:

Cod: Selectaţi tot

mysql_set_charset("SET character_set_results='utf8', character_set_client='utf8', character_set_connection='utf8', character_set_database='utf8', character_set_server='utf8'");

- Totusi, mysql_set_charset() e anulat in noile versiuni de PHP, si se recomanda PDO sau MySQLi, cu metoda:

Cod: Selectaţi tot

$conn->query('SET character_set_client="utf8",character_set_connection="utf8",character_set_results="utf8";');

cadou
Multumesc. Am folosit ultima varianta pentru PDO :)

Edit:
Exista vreo diferenta intre utf8 si utf-8 ?
Vad ca ultimul cod merge, dar cateodata da rateuri, cateodata afiseaza in pagina fara diacritice si cu semnul ?

MarPlo
Sintaxa pentru setare tip caractere in myql e 'utf8' (fara liniuta).
Instructiunea SQL urmatoare se aplica la toate conexiunile la mysql (inclusiv pentru preluare date).

Cod: Selectaţi tot

$conn->query('SET character_set_client="utf8",character_set_connection="utf8",character_set_results="utf8";');
- Daca in mysql caracterele sunt adaugate corect, problema e undeva la partea de afisare.
Codul php sa aibe acest header():

Cod: Selectaţi tot

header('Content-Type: text/html; charset=utf-8');
Iar in zona <head> din html (pentru HTML5) acest meta:

Cod: Selectaţi tot

<meta charset="utf-8" />

cadou
Am acel header iar in head am acel meta. In baza de date apare corect cu diacritice ...
am meta de 2 feluri:

Cod: Selectaţi tot

<meta charset="utf-8" />
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
Am incercat pe rand cu ele, am incercat si ambele deodata, aceeasi problema....

MarPlo
Problema poate fi de la codul php.
Nu stiu cauza, dar poti afla verificand treptat cu 'echo' in php datele de la preluare din mysql pana la afisare.

- Poti sa incerci sa adaugi urmatorul cod in .htaccess. Nu stiu daca functioneaza, teoretic seteaza charset utf-8 pentru toate fisierele.

Cod: Selectaţi tot

AddDefaultCharset utf-8
Sau pentru anumite tipuri de extensie:

Cod: Selectaţi tot

AddCharset utf-8 .html .css .js .php

Subiecte similare