WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Mysql INSERT: data med ÅÄÖ blir tomma (https://www.wn.se/forum/showthread.php?t=33593)

radioaktivitet 2008-11-28 13:04

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.

Jonas 2008-11-28 13:05

Citat:

Ursprungligen postat av Magnus_A
Citat:

Ursprungligen postat av Jonas
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?

Jag skrev detta eftersom alla i tråden påpekar att det är fel teckenuppsättning, eftersom mysql klarar av att skriva utf8 i latin1 så är det nog inte det som är felet.

dotvoid 2008-11-28 13:08

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.

radioaktivitet 2008-11-28 13:14

Å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...

dotvoid 2008-11-28 13:16

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.

dotvoid 2008-11-28 13:19

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.

radioaktivitet 2008-11-28 13:24

Citat:

Originally posted by dotvoid@Nov 28 2008, 14:16
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.
ut.txt: ISO-8859 English text, with very long lines, with CRLF, LF line terminators

Magnus_A 2008-11-28 16:55

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.

radioaktivitet 2008-11-29 10:06

Citat:

Originally posted by Magnus_A@Nov 28 2008, 17:55
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.
Allting som skrivs till databasen som innehåller Å,Ä och Ö blir istället tom sträng.

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.

radioaktivitet 2008-12-04 14:01

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!


Alla tider är GMT +2. Klockan är nu 05:21.

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