Flashback bygger pepparkakshus!
  • 1
  • 2
2023-03-20, 19:25
  #1
Medlem
Kottkompotts avatar
Har fått igång en MariaDB på vårt webbhotell, och har importerat en CSV-fil för att testa så det funkar.
Dock visas å, ä och ö fel, och blir istället frågetecken när jag ska kolla på datan i DBeaver.
Testade att exportera tillbaka datan, och helt klart är det samma fel där.
Encoding är utf-8, som jag antar det bör vara.
Kolumntypen är satt till text vid import.

Hur löser man det här?
Jag är så pass ny på databaser att jag väldigt gärna behöver ett GUI, och det är bara MariaDB som går köra på webbhotellet.
__________________
Senast redigerad av Kottkompott 2023-03-20 kl. 19:32.
Citera
2023-03-20, 19:44
  #2
Bannlyst
Citat:
Ursprungligen postat av Kottkompott
Har fått igång en MariaDB på vårt webbhotell, och har importerat en CSV-fil för att testa så det funkar.
Fyfan för problem med encoding. Hur importerar du filen? Vad har databasen för collation? Det bör nog vara latin1_swedish_ci för dig.

edit: frågan är om inte utf8mb4_general_ci-collation borde vara det som funkar bäst. Det var ett tag sedan jag mekade med sånt här. Sorry, men förhoppningsvis ger det lite hälp på vägen i alla fall.
__________________
Senast redigerad av anetregor 2023-03-20 kl. 19:48.
Citera
2023-03-20, 19:46
  #3
Har du ställt in UTF-8?

Här är en länk som kanske kan hjälpa dig https://mariadb.com/kb/en/setting-character-sets-and-collations/

Citat:
Ursprungligen postat av anetregor
Fyfan för problem med encoding. Hur importerar du filen? Vad har databasen för collation? Det bör nog vara latin1_swedish_ci för dig.
Instämmer. Det borde vara a problem of the past.
Citera
2023-03-22, 14:45
  #4
Medlem
Kottkompotts avatar
Har försökt att bytta collation med denna kod, men det verkar inte hjälpa:
Kod:
ALTER TABLE Adresser CONVERT TO CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY adress VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY postnr VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY postort VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY kommun VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Kan se i DBeaver att collation bå både table och enskilda kolumner är satt till latin1_swedish_ci, men det verkar inte hjälpa.
Har så klart rensat table och gjort ny import av CSV-fil till table efter att collation ändrats.
Citera
2023-03-22, 16:03
  #5
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Kottkompott
Har försökt att bytta collation med denna kod, men det verkar inte hjälpa:
Kod:
ALTER TABLE Adresser CONVERT TO CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY adress VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY postnr VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY postort VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE Adresser MODIFY kommun VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Kan se i DBeaver att collation bå både table och enskilda kolumner är satt till latin1_swedish_ci, men det verkar inte hjälpa.
Har så klart rensat table och gjort ny import av CSV-fil till table efter att collation ändrats.
En workaround, om databasen strular med collation, är att använda URL-encode på data som sparas i den.
Men UTF-8 bör det vara inställt på enligt min erfarenhet.
Frågan är också hur datan ser ut i CSV-filen.
__________________
Senast redigerad av Enterprise 2023-03-22 kl. 16:06.
Citera
2023-03-22, 16:27
  #6
Medlem
Kottkompotts avatar
Citat:
Ursprungligen postat av Enterprise
En workaround, om databasen strular med collation, är att använda URL-encode på data som sparas i den.
Men UTF-8 bör det vara inställt på enligt min erfarenhet.
Frågan är också hur datan ser ut i CSV-filen.
Hade nyss ett enormt bök när våra grejer skulle integreras mot databaser där det var URL encode, så om det är möjligt slipper jag gärna den biten.
Ska helst vara lite lätt att importera och exportera grejer till och från CSV och XLSX också, även för någon som inte ids pyssla med regex och/eller replace.

Här är ett exempel på hur en importerad CSV-fil ser ut:
Kod:
adress;postnr;postort;kommun
Alingsåsvägen 5;449 50;Alafors;Ale
Alingsåsvägen 7;449 50;Alafors;Ale
Alingsåsvägen 9;449 50;Alafors;Ale
Alingsåsvägen 10;449 50;Alafors;Ale

Vilket i databasen ser ut som:
Kod:
adress            postnr  postort  kommun
Alings?sv?gen 5   449 50  Alafors  Ale
Alings?sv?gen 7   449 50  Alafors  Ale
Alings?sv?gen 9   449 50  Alafors  Ale
Alings?sv?gen 10  449 50  Alafors  Ale

Har valt semikolon som delimiter då det är så lätt hänt att någon använd kommatecken någonstans, och semikolon är åtminstone lite ovanligare, även om det i sig sedan är ett enormt bök mot url encode.
__________________
Senast redigerad av Kottkompott 2023-03-22 kl. 16:43.
Citera
2023-03-22, 17:03
  #7
Medlem
Enterprises avatar
Ja, ska man använda databasen till något annat än att hämta en record från en viss id, så riskerar det att bli buggigt och kass med URL-encoded data, så jag tar tillbaka det vid närmare eftertanke!
Citera
2023-03-22, 19:52
  #8
Medlem
Kottkompotts avatar
Citat:
Ursprungligen postat av Enterprise
Ja, ska man använda databasen till något annat än att hämta en record från en viss id, så riskerar det att bli buggigt och kass med URL-encoded data, så jag tar tillbaka det vid närmare eftertanke!
Det löste sig nästan den här gången.
Testade utf8_swedish_ci, latin1_swedish_ci och utf8mb4_swedish_ci, och då kom jag till nästa problem.

Istället för helt vanliga frågetecken så ser jag nu istället svarta rutor med vita frågetecken i, som brukar dyka upp när det interface man använder inte kan visa tecknet ordentligt.
En sån här:
https://slang.net/img/help/replacement_character.png

Läser jag in databasen som en dataframe med pandas så är det så här, det ser likadant ut i DBeaver:
Kod:
0    Avasj�v�gen 17  917 04    Borgafj�ll  Dorotea
1    Avasj�v�gen 29  917 04    Borgafj�ll  Dorotea
2    Avasj�v�gen 30  917 04    Borgafj�ll  Dorotea

Förut var det åtminstone vanliga frågetecken.
Kanske får mecka runt med andra collations lite till.
__________________
Senast redigerad av Kottkompott 2023-03-22 kl. 20:00.
Citera
2023-03-22, 20:07
  #9
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Kottkompott
Det löste sig nästan den här gången.
Testade utf8_swedish_ci, latin1_swedish_ci och utf8mb4_swedish_ci, och då kom jag till nästa problem.

Istället för helt vanliga frågetecken så ser jag nu istället svarta rutor med vita frågetecken i, som brukar dyka upp när det interface man använder inte kan visa tecknet ordentligt.
En sån här:
https://slang.net/img/help/replacement_character.png

Läser jag in databasen som en dataframe med pandas så är det så här, det ser likadant ut i DBeaver:
Kod:
0    Avasj�v�gen 17  917 04    Borgafj�ll  Dorotea
1    Avasj�v�gen 29  917 04    Borgafj�ll  Dorotea
2    Avasj�v�gen 30  917 04    Borgafj�ll  Dorotea

Förut var det åtminstone vanliga frågetecken.
Kanske får mecka runt med andra collations lite till.
Ja, känns som ett encoding-problem.
Vad händer om du tar element nr 2 i Dataframen (där ö och ä blivit frågetecken) och kör Pythons ord()-funktion på de strulande tecknen?
Citera
2023-03-22, 20:32
  #10
Medlem
Kottkompotts avatar
Citat:
Ursprungligen postat av Enterprise
Ja, känns som ett encoding-problem.
Vad händer om du tar element nr 2 i Dataframen (där ö och ä blivit frågetecken) och kör Pythons ord()-funktion på de strulande tecknen?
Avasj�v�gen blir detta:
65
118
97
115
106
65533
118
65533
103
101
110
32
49
55

Tror annars jag kanske hittat problemet.
Kör jag detta:
Kod:
SHOW VARIABLES LIKE 'character_set_database';
Så returneras
Variable_name: character_set_database
Value: latin1

Fick tipset att detta ska ändras till swe7, men jag får inte till hur det ska gå till.
Testade SET NAMES 'swe7'; (på god rekommendation av ChatGPT, för jag kan knappt SQL) men det verkar inte hända något där.
Citera
2023-03-22, 20:40
  #11
Moderator
Humbugs avatar
Annars: Öppna CSV-filen i notepad, spara som och byt från ANSI till UTF8.
Citera
2023-03-22, 21:10
  #12
Medlem
Kottkompotts avatar
Citat:
Ursprungligen postat av Humbug
Annars: Öppna CSV-filen i notepad, spara som och byt från ANSI till UTF8.
Det funkade faktiskt
Tack!
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in