Avatar billede hrole Mester
04. marts 2009 - 16:20 Der er 29 kommentarer og
1 løsning

Charset, kollation, utf8 - ren forvirring

Hej,

Jeg bliver mere forvirret, jo mere jeg forsøger at forstå disse begreber, og jeg har ofte problemer på min hjemmeside med disse (problemer med danske bogstaver).
Er der en som kan forklare mig langsomt og præcist hvad jeg skal gøre og hvad jeg skal undgå og hvad jeg bør ændre i følgende:)
Min side er i php. Efter evt. forbindelse til mysql sætter jeg <?php mysql_query("SET NAMES 'utf8';"); ?>, og i head <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.
Mysql database opsat til:
MySQL Tegnsæt: UTF-8 Unicode (utf8).
MySQL forbindelses-sammenkøring: utf8_danish_ci.
Kollation (Collation) utf8_danish_ci (det er måske samme som forbindelses-sammenkøring?) og hver enkelt række i tabellen er utf8_danish_ci.
Hvis jeg importere database, er den gemt som UTF8.
Avatar billede arne_v Ekspert
04. marts 2009 - 16:42 #1
charset er det samme som encoding - det angiver hvilken/hvilke bytes et givet bogstav oversaettes til

collation er sorterings raekekfoelgen
Avatar billede hrole Mester
04. marts 2009 - 17:09 #2
ok, men er utf8 og utf8_danish_ci identiske charsets? Eller er utf8_danish_ci en undergruppe af utf8?
Avatar billede coderdk Praktikant
04. marts 2009 - 17:17 #3
Sin arne_v skriver er utf8_danish_ci ikke et charset, det er en måde at sortere utf8-charsættet på.
Avatar billede arne_v Ekspert
04. marts 2009 - 17:22 #4
UTF-8 er et charset
utf8_danish_ci er en collation

Med UTF-8 encoding gemmes engelske bogstaver som 1 byte mens danske bogstaver gemmes som 2 bytes og kinesiske tegn med endnu flere bytes.

utf8_danish_ci sorterer noget der er i UTF-8 encoding efter danske regler (maa betyde at ÆØÅ kommer lige efter XYZ) og ignorerer forskellen paa store og smaa bogstaver d.v.s. at a kommer sammen med A.
Avatar billede hrole Mester
04. marts 2009 - 18:52 #5
ok. Så antager jeg der ikke er nogle fejl i mine indstillinger som angivet i første indlæg. Men så undrer det mig at hvis jeg udtrækker et link fra databasen, som indeholder æøå, fungerer det ikke. Ingen problemer hvis der ikke er æøå med.
Avatar billede majbom Novice
04. marts 2009 - 19:28 #6
er dine filer gemt som UTF8?
Avatar billede hrole Mester
04. marts 2009 - 19:39 #7
ja, de er gemt som utf8
Avatar billede hrole Mester
04. marts 2009 - 21:16 #8
problemet er løst, det var slet ikke encodingen der drillede.
Avatar billede hrole Mester
02. juni 2009 - 20:37 #9
lukker
Avatar billede styrk Nybegynder
10. juni 2009 - 20:19 #10
kunne du så ikke skrive løsningen? :-)
Avatar billede hrole Mester
10. juni 2009 - 20:32 #11
Der er nu ikke rigtig en løsning på mit spørgsmål. Det var mere et forståelsesproblem af de begreber jeg nævnte i mit første indlæg. Du har måske noget i samme boldgade som driller?
Avatar billede styrk Nybegynder
10. juni 2009 - 20:41 #12
Ja.

Jeg har problemer med æøå udtræk fra mysql. Alt hvad jeg henter fra databasen via en query bliver lavet om til mærkelige tegn (altså æøå). Sidder og overglor google...
Avatar billede arne_v Ekspert
10. juni 2009 - 20:51 #13
Altsaa de ting som du fik svar paa i 1,3,4 ???
Avatar billede styrk Nybegynder
10. juni 2009 - 20:51 #14
Jeg har sat min side til at skrive mysql_client_encoding() ud, hvilket giver mig latin1. Jeg har ændret det til uft8 i databasen men får stadigvæk samme resultat. bum buuum.. :s
Avatar billede styrk Nybegynder
10. juni 2009 - 21:03 #15
jeg har samme problem når jeg indstætter noget i databasen med æøå, så bliver det lavet om til underlige tegn.
Avatar billede hrole Mester
10. juni 2009 - 21:06 #16
ok. Vises de danske bogstaver korrekt i databasen?
Hvilken charset bruger du i din header?
Avatar billede hrole Mester
10. juni 2009 - 21:07 #17
arne_v: ja?
Avatar billede hrole Mester
10. juni 2009 - 21:10 #18
ok. Hvordan indsætter du i databasen? import via phpadmin? eller via kode?
Avatar billede styrk Nybegynder
10. juni 2009 - 21:15 #19
jeg benytter en myqsl query fra mit php script til at indsætte i databasen.

Hvis jeg indsætter danske bogstaver via phpmyadmin vises de korret i phpmyadmin, men ikke på min side, der vises de som "?". Indsætter jeg danske bogstaver ved hjælp af en query (en form) så bliver de sat ind som til nogle mærkelige tegn i databasen.

Jeg har prøvet at lave et dumb (print_r) af post data'en, og der er ÆØÅ intakte.
Avatar billede hrole Mester
10. juni 2009 - 21:18 #20
ok, det er måske lidt over mit niveau. Når du skriver de vises på din side som ?, mener du så i Firefox?
Avatar billede arne_v Ekspert
10. juni 2009 - 21:21 #21
re #17)

Og saa tog du alle point selv?
Avatar billede styrk Nybegynder
10. juni 2009 - 21:24 #22
ja i firefox :-)
Avatar billede hrole Mester
10. juni 2009 - 21:29 #23
Det kan jeg godt se delvist var en fejl, men jeg kan ikke se du havde lagt svar. Dine definitioner er gode, men det er vel ikke et direkte svar på mit spørgsmål: Er der en som kan forklare mig langsomt og præcist hvad jeg skal gøre og hvad jeg skal undgå og hvad jeg bør ændre i følgende:
Avatar billede hrole Mester
10. juni 2009 - 21:32 #24
styrk:
det problem har jeg også haft, jeg er dog ikke lige 100% sikkert på løsning. Men hvis du efter forbindelsen til databasen er etableret har mysql_query("SET NAMES 'utf8';, så prøv at fjerne dette.
Avatar billede arne_v Ekspert
10. juni 2009 - 21:39 #25
re #23)

Men nu skrev du jo i #11:

"Der er nu ikke rigtig en løsning på mit spørgsmål. Det var mere et forståelsesproblem af de begreber jeg nævnte i mit første indlæg."
Avatar billede hrole Mester
10. juni 2009 - 21:51 #26
Så vidt jeg kan se i denne tråd har jeg ikke fået en løsning på:Er der en som kan forklare mig langsomt og præcist hvad jeg skal gøre og hvad jeg skal undgå og hvad jeg bør ændre i følgende:. Grunden til jeg stillede dette spørgsmål var at jeg var forvirret over begreberne charset, kollation, utf8, tegnsæt mv. og pga. dette havde problemer med de danske bogstaver.
Avatar billede styrk Nybegynder
10. juni 2009 - 21:58 #27
Jeg har snydt lidt.

Jeg har indsat følgende efter min connect

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $this->lid);

og nu vises æøå korrekt (både på min webside og i phpmyadmin), jeg synes dog det er lidt en lappe løsning.
Avatar billede arne_v Ekspert
10. juni 2009 - 21:59 #28
Det er skam helt fint at du vil have en konkret loesning.

Men saa maa du jo forklare styrk hvad din loesning var.

Du kan ikke baade:
- ikke uddele point fordi du vil have en konkret loesning til din kode
- haevde overfor styrk at du ikke kan give en loesning fordi du kun ville have forstaaelsen af nogle begreber

Det maa vaere enten eller.
Avatar billede hrole Mester
10. juni 2009 - 22:20 #29
arne_v: ærligt talt kan jeg ikke huske den præcise løsning, men jeg har forsøgt at hjælpe styrk. Da jeg oprindeligt skrev mit første indlæg var de omtalte begreber én stor rodekasse, som resulterede i problemer med danske bogstaver, derfor søgte jeg vejledning. Jeg har en bedre forståelse af de omtalte begreber, men det betyder ikke at mit problem er løst. Jeg har stadig problemer på nogle af mine sider, men jeg ved stadig ikke hvorfor.
Avatar billede hrole Mester
10. juni 2009 - 22:25 #30
styrk: ja det ligner lidt en lappeløsning. Jeg er bange for jeg ikke kan komme med flere idéer. Men et eller andet siger mig jeg slettede SET NAMES 'utf8' og ændrede charset fra utf-8 til iso-8859-1, men det er et skud i tågen.
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