charsets in mysql
Ik krijg af en toe wat vreemde tekens terug uit de database op mijn website. Mijn website heeft:
Quote:
<meta charset="utf-8" />
Nu kijk ik in phpmyadmin bij de instellingen en kom ik onderstaande tabel tegen. Een ratjetoe aan charsets (zie onderstaand). Geen idee waar ze allemaal voor dienen. Maar wie kan aangeven welke waarden het zouden moeten zijn en hoe/waar ik ze kan instellen.
Quote:
character set client utf8
(Globale waarde) latin1
character set connection utf8
(Globale waarde) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Globale waarde) latin1
character set server latin1
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_unicode_ci
(Globale waarde) latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci
(Globale waarde) latin1
character set connection utf8
(Globale waarde) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Globale waarde) latin1
character set server latin1
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_unicode_ci
(Globale waarde) latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci
mysqli_set_charset() na het openen van een databaseverbinding. Let op dat je hierbij de karakterset 'utf8' zonder streepje gebruikt in de syntaxis van MySQL.
Je kunt de karakterset instellen met Kan het niet via phpmyadmin? En moet ik alles op utf8 zetten?
Jop
PS mooi kookboek had je geschreven.
J Pla op 01/02/2013 14:07:23:
Kan het niet via phpmyadmin? En moet ik alles op utf8 zetten?
Je moet UTF-8 instellen op drie niveaus:
1. in de MySQL-database per database, tabel of kolom (dat kan inderdaad met phpMyAdmin);
2. voor elke databaseverbinding met mysqli_set_charset();
3. in elke webpagina.
In de webpagina gebruik je nu alleen een meta-tag, maar vul dat voor maximale compatibiliteit met oudere browsers aan tot:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
Voor een echte HTTP-header (in plaats van een HTTP-equivalent in HTML) gebruik je in PHP:
In SQL kan het ook:
@Ger: als ik jouw SQL commando's draai in de SQL module van PHPMyAdmin zie ik niets veranderen. Kolommen met collatie utf8_unicode_ci worden geen general. Of moet ik dat handmatig per kolom nog een keer instellen?
Daarnaast blijf ik (in PMA bij variabelen) nog steeds latin 1 en swedish zien. Maakt dat niets uit dan?
@Ward
Kan ik mysqli commando's gebruiken als ik niet met objecten werk? Ik gebruik mysql_connect en mysql_select_db om de verbinding op te zetten. Ik begrijp dat ik na het selecteren van de database de volgende php-code toe moet voegen:
Of zie ik dit helemaal verkeerd.
Daarna moet ik mijn website inderdaad nog in UTF 8 zetten. Ik heb "<meta charset="UTF-8">" er al instaan, maar zal de andere regel ook toevoegen voor oudere browsers.
Tenslotte moet ik ook nog boven aan het eerste php bestand dat ik op roep (bv index.php?page=1002) de php code voor header zetten zoals jij aan geeft? Of is het dan dubbel op? En moet dat alleen in index.php of ook alle php bestanden die binnen index weer worden opgeroepen?
Alvast bedankt voor jullie gewaardeerde reactie.
Toevoeging op 03/02/2013 00:06:23:
Aanvullend:
Ik lees ergens dat je voor php ook in apache kan instellen dat alles in utf8 gaat. Dan zou ik in de file:
Quote:
/etc/apache2/conf.d/charset
De regel:
Quote:
AddDefaultCharset UTF-8
toe moeten voegen. Klopt dat en wat bereik ik er mee?
Heeft er nog iemand een reactie op mijn laatste vragen?
Jop
Wat bedoel je met:
Quote:
Met PHP is het belangrijk om bij alle functies waar een encoding opgegeven kan worden, dit op te geven.
Met de functies die je in het voorbeeld noemt maakt je toch samperamp codes?
Tenslotte:
mag ik mysql en mysqli commando's door elkaar gebruiken? en wat is het verschil er tussen?