Avatar billede neverknow Nybegynder
19. september 2007 - 15:53 Der er 13 kommentarer

Alternativ til utf8_encode() ved indsættelse af data i MySQL

Hej Eksperter,

Har lige haft en del problemer med at få converteret alle mine gamle sider til UTF-8. Det har jeg løst nu med et lille script og iconv. Men nu er problemet så når jeg vil til at indsætte data i min nye database.

Det data jeg smidder ind lige nu ryger ind i MySQL som ISO-8859-1. Det skal det jo ikke, det skal være utf8. Så kan jeg vælge at bruge utf8_decode og encode på alt in/output, det gidder jeg bare ikke! Er der ikke et sted man kan sætte det så den som standard tager det hele som utf8 encoded?

Har sat defaultcharset til utf8 både i php.ini og apache2.conf. Hvad er det jeg misser/eller ikke forstår?

//Never
Avatar billede neverknow Nybegynder
19. september 2007 - 15:54 #1
Versioner:
hannecke:/home/tlh# uname -a
Linux hannecke.dk 2.6.9-023stab044.4-enterprise #1 SMP Thu May 24 17:41:23 MSD 2007 i686 GNU/Linux

PHP Version 5.2.0-8+etch7

MySQL: Serverversion: 5.0.32-Debian_7etch1-log

Apache/2.2.3 (Debian) PHP/5.2.0-8+etch7 Server at hannecke.dk Port 80
Avatar billede olebole Juniormester
19. september 2007 - 16:04 #2
<ole>

Det er vel din DB, der ikke bruger utf-8. Hvordan har du sat dén op?

/mvh
</bole>
Avatar billede neverknow Nybegynder
19. september 2007 - 18:30 #3
Den er sat som følger.

MySQL Tegnsæt:  UTF-8 Unicode (utf8)
Avatar billede neverknow Nybegynder
19. september 2007 - 18:31 #4
Og det er ikke min database der er sat forkert op. Hvis jeg fx laver den her:

$query = mysql_query("INSERT INTO services (`serviceName`, `ServiceDescription`, `servicePrice`, `serviceGroup`) values (
            '".utf8_encode("æøÅæøÅ")."',
            'æøÅÆØÅÆØÅÆØÅ',    
            '123',            
            '2')") or die(mysql_error());

Så vil serviceName blive vist rigtigt ved udtræk hvorimod serviceDescription vil være ? tegn.

&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
Avatar billede olebole Juniormester
19. september 2007 - 18:38 #5
Hvor kommer de data, du kommer i DB'en fra? Hvis de ankommer i utf-8, burde det ikke give problemer.
Er det dokument, du prøver at indsætte data med, gemt som utf-8 eller ANSI?
Avatar billede neverknow Nybegynder
19. september 2007 - 18:57 #6
De data der er fx. fra et ganske alm. php script som er utf8 encoded. Selv hvis jeg bruger PAM til at indsætte data uanset hvilken kollation jeg bruger så bliver det indsat som ISO-8859-1 dvs hvis jeg encoder db indholdet med utf8_encode så bliver det vist korrekt.
Avatar billede neverknow Nybegynder
19. september 2007 - 19:01 #7
Jeg var lidt for selvsikker nu fik jeg det til at virke med indsættelse via php scriptet med med PAM bliver det stadig indsat som iso-8859-1.
Avatar billede neverknow Nybegynder
19. september 2007 - 19:06 #8
Under variabler for hele min MySQL database i PAM fandt jeg det her:

Server-variabler og indstillinger
Variabel     Sessionsværdi / Global værdi
auto increment increment     1
auto increment offset     1
automatic sp privileges     ON
back log     50
basedir     /usr/
binlog cache size     32,768
bulk insert buffer size     8,388,608
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_unicode_ci
(Global værdi)     latin1_swedish_ci
collation database     latin1_swedish_ci
collation server     latin1_swedish_ci

jeg undrer mig lidt over character set server = latin1 og at collation står til latin1_swedish_ci?
Avatar billede neverknow Nybegynder
19. september 2007 - 19:07 #9
PAM = PMA = PHPMyAdmin
Avatar billede olebole Juniormester
19. september 2007 - 19:19 #10
Jamen, det ligner da også noget rod. Samme tegnsæt skal bruges overalt
Avatar billede neverknow Nybegynder
19. september 2007 - 19:27 #11
Korrekt men har ingen ide om hvordan jeg ændre de ting der?
Avatar billede neverknow Nybegynder
19. september 2007 - 20:11 #12
Problemet er nu kun i PHPMyAdmin når jeg vil indsætte data herfra, bliver det stadig indsat som latin1. Jeg er klar over at jeg kan lade være med at bruge PMA, men det er nu meget rart at kunne sætte data ind, derfra lidt hurtigt en gang imellem.
Avatar billede olebole Juniormester
20. september 2007 - 02:05 #13
Kollationen på tabellerne/felterne, mener jeg, du kan se/sætte i PMA. Jeg bruger selv et andet program, så PMA ligger lidt fjernt i hukommelsen  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester