UTF8 svensk sortering i MySQL?

Tråden skapades och har fått 12 svar. Det senaste inlägget skrevs .
1

Har en databas där allt sparas i kollationeringen uft8_swedish_ci. Alla html/php är i UTF8 format och har charset=utf-8. Alla värden som matas in, t.ex. åäö visas korrekt efter att man sparat.

Mitt problem är att när jag väljer sortering t.ex.

$sql = ("SELECT * FROM $database_table_name1 ORDER BY City");

Så sorteras det fel. Verkar bli engelsk sortering, åä hamnar bland a och ö bland o.

dvs Årjäng kommer före Arvika!

Hur löser man så att det blir korrekt svensk sortering?

  • Medlem
  • Halmstad
  • 2007-02-22 08:10

Kanske detta kan lösa det?
select foo from bar order by foo collate latin1_swedish_ci

Ursprungligen av crawen:

Kanske detta kan lösa det?
select foo from bar order by foo collate latin1_swedish_ci

Tack för ditt svar, crawen!

Jag försökte med ditt förslag att lägga till collate:

$sql = "SELECT * FROM $database_table1 ORDER BY City COLLATE latin1_swedish_ci";

och fick följande svar

COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'

Hmm, ser inte ut att funka.

Försökte även att köra
... COLLATE 'utf8_swedish_ci'

Inga klagomål, men problemet kvarstår: att å och ä är bland a och ö bland o.

  • Medlem
  • Mölndal
  • 2007-02-22 15:35

Utan att veta speciellt mycket om ämnet, låter det ändå som ett rimligt felmeddelande. Latin-1 och UTF-8 är ju helt olika teckenkodningar. Gissar att man måste välja en collation som matchar teckenkodningen. (Vilket du gjorde, synd att det inte fungerade.)

Ursprungligen av memark:

Utan att veta speciellt mycket om ämnet, låter det ändå som ett rimligt felmeddelande. Latin-1 och UTF-8 är ju helt olika teckenkodningar. Gissar att man måste välja en collation som matchar teckenkodningen. (Vilket du gjorde, synd att det inte fungerade.)

Jag tror at det är en bug i MySQL eller en "unimplemented feature"!

Har du så att både kolumner och tabell har kollationeringen uft8_swedish_ci?

  • Medlem
  • Halmstad
  • 2007-02-23 20:00

Kanske testa:
ALTER TABLE `TABELLNAMN` DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci

Min testtabell sorterar vettigt med den settingen iaf.

Äntligen, jag har hittat felet:
man måste ange ' i SQL frågor för att svensk sorteringen verkligen ska sparka igång!

ex.
SELECT * FROM Adressbok ORDER BY Namn --> UTF-8 sorteringen funkar ej tillfredsställande (engelsk sortering)

SELECT * FROM Adressbok ORDER BY 'Namn' --> UTF-8 sortering funkar utmärkt (svensk sortering)

Altså skall strängen vara:

$sql = ("SELECT * FROM $database_table_name1 ORDER BY 'City'");

Det måste väl räknas som bug?!

Ursprungligen av The Real Viking:

Äntligen, jag har hittat felet:
man måste ange ' i SQL frågor för att svensk sorteringen verkligen ska sparka igång!

ex.
SELECT * FROM Adressbok ORDER BY Namn --> UTF-8 sorteringen funkar ej tillfredsställande (engelsk sortering)

SELECT * FROM Adressbok ORDER BY 'Namn' --> UTF-8 sortering funkar utmärkt (svensk sortering)

Altså skall strängen vara:

$sql = ("SELECT * FROM $database_table_name1 ORDER BY 'City'");

Det måste väl räknas som bug?!

Jag vet att det var en tid sedan som någon skrev här men jag hade också problem med detta och en google-sökning ledde mig hit. Min tabell är (och måste vara)
utf8_general_ci vilket gör att din lösning inte fungerade för mig. Jag löste det dock genom att lägga till COLLATE utf8_swedish_ci efter ORDER BY field, alltså ORDER BY field COLLATE utf8_swedish_ci ASC (t.ex.). Det spelar dock ingen roll om man har ` eller inte för mig. MySQL klientversion: 5.0.41

Tack ändå!

  • Medlem
  • Halmstad
  • 2007-03-20 13:47

Härligt att du löste det
Ja det låter helt klart som en bugg, det där ska ju inte behövas...

Det funkade för mig, Ål kom sist:

9 mjölk
1 morot
7 peppar malen
2 potatis
5 salt
8 smör normalsaltat
6 socker
10 vaniljglass
4 vita bönor
12 vitt bröd
11 yoghurt 3% fett
13 Ål färsk

Det kanske är skillnad på ´ och ' (snett och rakt citat-tecken)?

Om du har ' så ska den sortera efter den strängen, eller hur blir det? Jag har aldrig sett det tidigare och när jag provade så har jag för mig att jag fick mysql-error eller att svaret sorterades helt konstigt.

1
Bevaka tråden