Kom ihåg mig?
Home Menu

Menu


Mysql INSERT: data med ÅÄÖ blir tomma

 
Ämnesverktyg Visningsalternativ
Oläst 2008-11-28, 11:27 #1
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
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.
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 12:10 #2
Alan Alan är inte uppkopplad
Medlem
 
Reg.datum: Jun 2008
Inlägg: 72
Alan Alan är inte uppkopplad
Medlem
 
Reg.datum: Jun 2008
Inlägg: 72
Själva sidan måste skicka texten i latin1 också, kolla om den gör det eller om det är utf-8
Alan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 12:24 #3
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
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
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 13:33 #4
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
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
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 13:43 #5
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
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.
dotvoid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 13:47 #6
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
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?
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 13:50 #7
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
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
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 13:52 #8
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
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.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 13:59 #9
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Citat:
Originally posted by Jonas@Nov 28 2008, 13:52
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.

Varför ska du ha två konstiga tecken istället för ett riktigt?
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 14:04 #10
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
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...
dotvoid är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 04:47.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017