FAQ |
Kalender |
![]() |
#11 | ||
|
|||
Flitig postare
|
Ok. Nu har jag provat mysql_query('set names "latin1"') precis i början på mitt script.
mysql_client_encoding() returnerar "latin1". Men trots detta blir resultatet detsamma som jag beskrev i första posten. Är det något mer jag kan prova? Edit: jag har dubbelkollat att datan är i iso-8859-1. Jag är 100% säker. |
||
![]() |
![]() |
![]() |
#12 | ||
|
|||
Klarade millennium-buggen
|
Citat:
|
||
![]() |
![]() |
![]() |
#13 | ||
|
|||
Medlem
|
Två konstiga tecken... jo UTF-8 använder ju två bytes för att lagra tecken som inte ingår i basen av iso-8859-1.
Finns bra beskrivningar av utf-8, iso-8859-1 och latin1 samt deras skillnader och förklaring på namngivning etc på wikipedia t ex. Kan vara bra att läsa på. Som programmerare eller utvecklare bör man ha lite koll på det. |
||
![]() |
![]() |
![]() |
#14 | ||
|
|||
Flitig postare
|
Åter till topic:
Jag har nu provat att exekvera exakt samma php-kod, fast denna gång via webbläsaren. Allting fungerade perfekt. All data hamnade i tabellen precis som jag vill. Det innebär att mitt problem har någonting med cli att göra. Frågan är bara vad... |
||
![]() |
![]() |
![]() |
#15 | ||
|
|||
Medlem
|
Tja - någonstans är det högst troligen galet med teckenuppsättningen. PHP i sig har ingen uppfattning om teckenuppsättning. Allt är strängar av bytes. Däremot kan det bli galet om man blandar teckenuppsättningar i data och parametrar till funktioner för strängjämförelser, strängersättning och annat.
Tänk på att om du sitter i ett någolunda modernt linux så används och förutsätts att textfiler, output mm är i utf-8 - inte iso-8859-1. Så om du kör scriptet och printar ut i terminalen och allt ser fint ut så kanske det är utf-8? Se till att batchjobbet genererar en textfil också. Kontrollera den sedan med file. |
||
![]() |
![]() |
![]() |
#16 | ||
|
|||
Medlem
|
Det ovan innebär också att om du sitter i mysql-klienten och kikar i databasen kommer strängar med åäö i iso-8859-1 ersättas med ? som standard.
|
||
![]() |
![]() |
![]() |
#17 | ||
|
|||
Flitig postare
|
Citat:
|
||
![]() |
![]() |
![]() |
#18 | ||
|
|||
Klarade millennium-buggen
|
Nu har vi analyserat teckenuppsättningen fram och bak, men det har inte löst problemet. Som var att det inte skrevs något i databasen. Normalt ska det skrivas oavsett vilka tecken som strängen innehåller, och inget felmeddelande fanns det heller. Däremot fungerade det bra via terminal, vilket gör mig förbryllad. Här ligger nåt begravet som inte stämmer.
|
||
![]() |
![]() |
![]() |
#19 | ||
|
|||
Flitig postare
|
Citat:
Det fungerar bra via windows klient och om man kör samma php-script på webbservern. Felet uppkommer endast om man kör det via kommandoraden. Jag har kört php_info på både webbservern och från kommandoraden. Allting som har att göra med teckenuppsättningar ser exakt likadant ut. Jag har kört frågan "SHOW VARIABLES LIKE 'c%'" från både webbservern och kommandoraden. Allt ser likadant ut. Jag är 100% säker på att sql-frågan som innehåller å, ä och ö tecken är i iso-8859-1. Tabellen är satt till latin1 och mysql_client_encoding() returnerar "latin1" både från kommandoraden och från webbservern. |
||
![]() |
![]() |
![]() |
#20 | ||
|
|||
Flitig postare
|
Jag glömde skriva in och berätta. I måndags när jag provade mitt script så fungerade det. Jag har gjorde inte några förändringar i det - så det är mysko att det bara började fungera hux flux. Men så är det. Måste vara ett tillfälligt fel. Det har fungerat sedan dess...
Tack för hjälpen allesammans! |
||
![]() |
![]() |
Svara |
|
|