Mysql indstillinger fra latin1 til utf-8?

Tags:    mysql database utf-8 latin1

<< < 123 > >>
Hej Udviklere..

Jeg har ikke så stor erfaring med mysql, så har brug for noget hjælp, da jeg gerne vil rette latin1 til utf-8..

Indstillinger:
character set client utf8
(Global værdi) latin1
character set connection utf8
(Global værdi) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Global værdi) latin1
character set server latin1
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_danish_ci
(Global værdi) latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci

Jeg vil selvfølgelig gerne have rettet alt til utf-8.

Jeg ved bare ikke hvordan sql sætningerne skal være?

På forhånd tak for hjælpen :)



21 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 16 karma
Sorter efter stemmer Sorter efter dato
Jeg antager at du bruger MySQL 5. Tjek først at du ikke bruger en ældre version.

Jeg antager at du har gemt dine data i databasen i samme tegnkodning som du har erklæret databasen med. For at tjekke om det er tilfældet, så tjek om ikke-ASCII tegn ser korrekte ud når de vises i phpmyadmin. (Det var her forfatteren af den artikel Benni linker til havde problemer)

For at ændre tegnkodningen når du hiver data ind og ud af databasen skal du lave en SET NAMES query. Hvis du bruger PHP gøres det sådan:

Med mysqli:
http://php.net/mysqli_set_charset

med PDO:
http://akrabat.com/php/utf8-php-and-mysql/

Den gamle php-mysql-extension (mysql_query) virker ikke med UTF-8.

For at ændre tegnkodningen for data gemt i databasen, kan du bruge phpmyadmin, ved manuelt at klikke rundt.



Indlæg senest redigeret d. 21.08.2011 12:41 af Bruger #3143
Fandt en anden stakkel, der har været igennem det samme..
http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

men hvis du ikke har mange gamle databaser liggende er det nemmeste vel at geninstallere ?



Dit screenshot var af din side, ikke af phpmyadmin, og du skrev ikke andet om hvor du så disse tegn. Du nævnte overhovedet ikke phpmyadmin.

Er det en ny side du er ved at lave, eller er der eksisterende data i databasen der skal konverteres?

Har du fået skiftet mysql_* ud med mysqli_* nu?



Det er bare en copypaste fejl, som jeg lige overså - fejlen er der stadig.

Måske du så lige skulle copy paste igen, for fejlbeskeden tyder meget på, at det er en dobbeltparentes der driller.

Fejlbeskeden siger: der er et komma, hvorfor er der det?

Måske fordi: Kommandoen har 2 parametre:

kommando(param1,param2);

og du sætter en parentes formeget ind:
kommando((param1,param2));

dette tolkes som den første parameter er (param1,param2) og den anden parameter er tom.

kommando((param1,param2),);




Hmm - tror ikke lige at jeg kan geninstallere, da det ligger på phpmyadmin.gigahost :)

Det andet hjalp mig desværre ikke.

Har også prøvet noget:
Fold kodeboks ind/udKode 


Men det ændrede ikke noget..



Indlæg senest redigeret d. 20.08.2011 19:35 af Bruger #15747
+Karma fra mig af. Der gik lige et lys op for mig, da jeg læste dette.

Den gamle php-mysql-extension (mysql_query) virker ikke med UTF-8.






Jeg antager at du bruger MySQL 5. Tjek først at du ikke bruger en ældre version.

Jeg antager at du har gemt dine data i databasen i samme tegnkodning som du har erklæret databasen med. For at tjekke om det er tilfældet, så tjek om ikke-ASCII tegn ser korrekte ud når de vises i phpmyadmin. (Det var her forfatteren af den artikel Benni linker til havde problemer)

For at ændre tegnkodningen når du hiver data ind og ud af databasen skal du lave en SET NAMES query. Hvis du bruger PHP gøres det sådan:

Med mysqli:
http://php.net/mysqli_set_charset

med PDO:
http://akrabat.com/php/utf8-php-and-mysql/

Den gamle php-mysql-extension (mysql_query) virker ikke med UTF-8.

For at ændre tegnkodningen for data gemt i databasen, kan du bruge phpmyadmin, ved manuelt at klikke rundt.


Jeg har i forvejen sat mysql_set_charset :) Det gør at æ ø å bliver vist korrekt i databasen.

jeg har ikke brugt set names, da der står: "Note:
Using mysql_query() to execute SET NAMES .. is not recommended."

Hmm.. Jeg har netop gemt tegnkodning som utf-8 i mine to tabeller - den ene hedder topics, som indeholder bl.a overskrift - den anden hedder posts, som indeholder selve indholdet som fx kommentar af brugeren.

Problemet er begge tabeller er ens med hensyn til kollation, hvor indstillingerne er utf8_unicode_ci.

Men af en eller anden grund, så bliver æ, ø og å vist rigtigt i browseren fra tabellen topics, men fra tabellen posts viser den de mærkelige tegn.

Jeg har ikke kunnet finde andre fejl end det skulle være mine generelle indstillinger fra alle databaser, som før angivet er:


Indstillinger:
character set client utf8
(Global værdi) latin1
character set connection utf8
(Global værdi) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Global værdi) latin1
character set server latin1
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_danish_ci
(Global værdi) latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci

Derfor var det også at jeg netop søgte hjælp til at rette disse indstillinger.

Jeg kan dog ikke sige, om det er der fejlen er.

Men som sagt - har det problem at den ene tabels data viser rigtig, men den anden ikke gøre? Hvad kan fejlen være?`:)



Indlæg senest redigeret d. 21.08.2011 18:35 af Bruger #15747
Forstår jeg dig korrekt, at æøå vises korrekt hvis TABELLEN er sat til latin1 via phpmyadmin, men forkert hvis den er sat til utf8, mens SET NAMES eller mysqli_set_charset er uændret?

Hvilket PHP-bibliotek bruger du? Du nævner mysql_query og mysql_set_charset i din post, men bruger du faktisk dem frem for mysqli eller PDO? Hvis du gør, så er det klart det går galt, da mysql_*-biblioteket er lavet til MySQL 4.0 og lavere, og de versioner understøtter slet ikke tegnkodning. Hvis det er tilfældet, så start med at skifte til mysqli.



Nej, så viser den stadig forkert fra den ene tabel og omvendt. Den viser altså både forkert med latin1 og utf8.

Jeg tror det har noget med min database opsætning?

Hvis jeg bruger mysqli_set_charset kommer fejlen: mysqli_set_charset() expects parameter 1 to be mysqli, string given in

ja jeg bruger MySQL 5.0 - så der skal nok rettes noget - bare underligt - har aldrig haft problemer med det :)





Jeg forstår ikke helt hvornår hvad vises forkert. Kan du beskrive det mere præcist?

Det er ikke nok at ændre set_charset til mysqli. Du skal ændre alle dine database-funktioner til mysqli.



Indlæg senest redigeret d. 22.08.2011 15:01 af Bruger #3143
<< < 123 > >>
t