FAQ |
Kalender |
2008-11-28, 11:27 | #1 | ||
|
|||
Flitig postare
|
I PHP kör jag följande två frågor:
INSERT INTO PRODUCTS SET ID = 1, NAME = "Hammare" INSERT INTO PRODUCTS SET ID = 2, NAME = "Målarpensel" Den första frågan fungerar bra. Den andra ger inget felmeddelande. Men raden innehåller inte 2 och "Målarpensel" utan 2 och "" (tom sträng). Som synes kan jag inte lägga till data som innehåller Å,Ä och Ö. Det blir bara tomma strängar istället för själva datan. Tabellen har Character Set "latin1" och Collation "latin1_swedish_ci". Finns det någon annan inställning (i php eller Mysql) som kan påverka? Mina tester visar att det endast är problem att lägga till text med Å, Ä och Ö när jag kör frågan från PHP. Kör jag samma fråga i en mysql-klient i windows så fungerar frågan prima... Men vad jag vet kan man inte ställa in något default character set i PHP. Och texten ovan är ju uppenbarligen i iso-8859-1. Jag kör väldigt nya versioner av både php och mysql. Tacksam för tips om var jag skall börja leta. |
||
Svara med citat |
2008-11-28, 12:10 | #2 | ||
|
|||
Medlem
|
Själva sidan måste skicka texten i latin1 också, kolla om den gör det eller om det är utf-8
|
||
Svara med citat |
2008-11-28, 12:24 | #3 | ||
|
|||
Klarade millennium-buggen
|
För att styra upp teckenhanteringen i själva kontakten med Mysql så kan man utfärda följande sql-kommando:
set names='önskad_teckenuppsättning' där önskad_tecken uppsättning kan till exempel vara: utf8 eller latin1 |
||
Svara med citat |
2008-11-28, 13:33 | #4 | ||
|
|||
Flitig postare
|
Wokioo: Vilken sida syftar du på? Ingen HTML är inblandad här. Det är ingenting som syns för någon...
Magnus_A: Går det att se vilket teckenuppsättning som jag har just nu? Edit: Så här ser mina inställningarnai Mysql ut (vet ej om det är relevant): character_set_client latin1 character_set_connection latin1 character_set_database latin1 character_set_filesystem latin1 character_set_results latin1 character_set_server latin1 character_set_system utf8 collation_connection latin1_swedish_ci collation_database latin1_swedish_ci collation_server latin1_swedish_ci |
||
Svara med citat |
2008-11-28, 13:43 | #5 | ||
|
|||
Medlem
|
Kanske använder du en terminal i linux? Du måste i så fall ha samma teckenuppsättning i din terminal.
Standard i linux nu för tiden är att terminalerna använder utf-8 istället för iso-8859-1. Eftersom du använder latin1 på tabellerna blir det då naturligtvis fel när du skriver in texten i terminalen. Det rätta, enligt mig, är att konvertera tabellerna till att använda utf-8. Iso-8859-1 är sakta (för sakta) på väg att fasas ut mot utf-8. Tyvärr innebär detta att verktyg och os från olika leverantörer ändras olika sakta beroende på vilken bakåtkompatibilitet de måste ta hänsyn till. Det måste ju även du och därmed kanske det andra alternativet, att ställa om terminalens teckenuppsättning, är mer rimligt. Men för all nyutveckling bör man använda utf-8 enligt mig. |
||
Svara med citat |
2008-11-28, 13:47 | #6 | ||
|
|||
Flitig postare
|
dotvoid: Ja, jag har ett batch-script i php som körs via cron.
Jag har plan på att byta till utf-8, men måste nog köra med iso-8859-1 ett tag till... Hur kan jag ändra så att terminalen använder iso-8859-1, och hur kan jag se om det verkligen är inställt att vara utf-8 just nu? |
||
Svara med citat |
2008-11-28, 13:50 | #7 | ||
|
|||
Klarade millennium-buggen
|
För att det ska ge effekt i dina php-script ska du utfärda kommandot där ungefär så här, efter att du öppnat kontakten med din server:
mysql_query('set names "latin1"'); För att returnera nuvarande character set för mysql-anslutningen i php, pröva: mysql_client_encoding() Edit: Om du kör php som cli är det viktigt att du vet precis vilka character sets som används. Du kan inte räkna med att det är samma som om du kört webversionen |
||
Svara med citat |
2008-11-28, 13:52 | #8 | ||
|
|||
Klarade millennium-buggen
|
MySQL kan lagra utf8 i latin1 fält, har gjort det och det fungerade bra.
Enda som sker är att specialtecken (ÅÄÖ mfl) blir 2st konstiga tecken istället för 1. |
||
Svara med citat |
2008-11-28, 13:59 | #9 | ||
|
|||
Klarade millennium-buggen
|
Citat:
|
||
Svara med citat |
2008-11-28, 14:04 | #10 | ||
|
|||
Medlem
|
Ja du kan lagra vilka bytes som helst i ett vanligt varchar-fält i mysql. Det är bara bytes oavsett du kör utf-8 eller iso-8859-1 eller något annat. Men du kommer få problem vid visning av data, vid sortering mm. Så det är inte särskilt smart.
Eftersom det är ett batchscript betyder inte terminalens teckenuppsättning något. Det hade bara spelat roll om du skrev saker manuellt i mysql-klienten. Om det är ett batchscript - varifrån kommer datan? Du måste se till att data hela vägen är i iso-8859-1. Om datan finns i batchscriptet av någon anledning bör du kontrollera vilken teckenuppsättning den är sparad i. (Kan göras med utility-programmet "file" - om den bara rapporterar PHP-script kan du döpa om filen till fil.txt först). Du kan om så behövs använda programmet "iconv" för att konvertera filer mellan olika teckenuppsättningar. (cat minfil | iconv -f utf-8 -t iso-8859-1 > minnyafil). Teckenuppsättningar är struliga innan man vant sig vid att alltid ha stenkoll på hela kedjan. Roligast blir det när utvecklare på gamla windows och utvecklare på linux jobbar i samma projekt... |
||
Svara med citat |
Svara |
|
|