Korrekt views-sortering med Å, Ä, Ö

Events happening in the community are now at Drupal community events on www.drupal.org.
lejonsson's picture

Jag har problem med att få korrekt sortering för de listningar som jag gör med views, Å, Ä och Ö sorteras nämligen som A och O. Vad är det som styr denna sortering och hur får jag ordning på denna problematik?

Comments

Se:

// Hans Nilsson, Kodamera AB
www.kodamera.se

Enkel lösning

TBarregren's picture

Problemet är att MySQL använder utf8_general_ci istället för utf8_swedish_ci. Enklaste sättet för att få rätt collation är att ange det när man skapar databasen:

CREATE DATABASE database_name SET utf8 COLLATE utf8_swedish_ci;

där database_name är namnet på den databas du skapar. Se också Johan Håkans blogg om saken: Multi languages and sort order.


Thomas BarregrenNodeOne

Om databasen redan finns

chosig's picture

Om databasen redan finns där:
ALTER DATABASE database_name COLLATE = utf8_swedish_ci;

http://dev.mysql.com/doc/refman/5.0/en/alter-database.html

--
Hjälper gärna (pro bono) de som vill lära sig Drupal (fast jag är inte i "Drupal Nirvana" än), vill någon ha professionell hjälp har jag ett företag också.

Ett lösning som faktiskt fungerar på existerande databas

AdrianB's picture

Jag hade precis detta problem med sorteringen i Views. Jag lyckades själv lista ut att det hade att göra med utf8_general_ci vs utf8_swedish_ci, men jag innan dess hittade inte denna tråd först när jag bara sökte med några andra sökord, så jag lägger till dessa här för att tråden ska bli enklare att hitta i framtiden:
alfabetisk sortering i Views med svenska tecken

Problemet är att råden här är tyvärr meningslösa om man redan har en databas.

Rådet om "enkel lösning" från TBarregren bara fungerar för en ny databas (och när man väl stöter på problemet har man rimligtvis redan en databas) och rådet från chosig (dvs ALTER DATABASE database_name COLLATE = utf8_swedish_ci;) hjälper inte.

Om man kör ALTER DATABASE database_name COLLATE = utf8_swedish_ci; ändrar man förvissa "collation" (vad heter det på svenska?) på själva databasen, men problemet är att varje tabell och varje kolumn (som kan ha collation) i dessa tabeller fortfarande har utf8_general_ci, så det hjälper inte.

Jag har inte hittat något MySQL-kommando för att enkelt ändra allting i databasen från utf8_general_ci till utf8_swedish_ci. Men det finns andra sätt.

För att ändra varje kolumn i varje tabell i hela databasen kan man göra en MySQL-dump av hela databasen, göra en sök- och ersätt på utf8_general_ci till utf8_swedish_ci och sen importera databasen igen.

Ett annat alternativ är detta skript: Phoca Changing Collation tool

Skriptet låter en fylla i databas, användare, lösenord och vilken collation man önskar och sen kör man det så går det igenom hela databasen, tabell för tabell, kolumn för kolumn och ändrar collation. Man får också en rapport för varje genomförd ändring.

Jag har själv testat skriptet på en Drupal-databas och det fungerade bra. Som vanligt bör man naturligtvis ta en backup på hela databasen innan man försöker sig på något sådant.

(Ett annat bra generellt råd innan man kör okända skript av denna typ är att skumma igenom skriptet innan man kör det, kan man lite PHP kan man oftast få en förståelse för vad det gör, så det inte gör något dumt.)

Hjälper detta mot ä (ä), ö (ö) problemet?

Azone's picture

Om man kör "Phoca Changing Collation tool", bör man köra "ALTER DATABASE database_name COLLATE = utf8_swedish_ci" dessutom.
Jag menar det första ändrar i befintlig databas, men den "enkla lösningen" säkerställer framtiden eller har jag missförstått detta?

Vad gör detta egentligen, mitt problem att jag får en massa Ä (ä), ö (ö) osv i en del texter, menyer etc. PÅ vissa ställen går det avhjälpa genom att ta bort "wysiwyg-editorn" men på andra ställen kommer jag inte åt detta. Är ovanstående lösningen för detta problem?

mvh
Anders

Super!

molaria's picture

Körde igenom en hel drupaldatabas nu med scriptet ovan och det fungerar nu klockrent.
Stort tack för detta tips som sparade mig massor av jobb! Suveränt!

MOL

Kan någon hjälpa mig med detta?

WhiplashInfo's picture

Hej,
JAg har inte kompetens nog att klara detta själv. KAn någon hjälpa mig - antingen med detaljintruktioner eller handgripligen?
Tack/ Tomas
www.whiplashInfo.se

westis's picture

Tjenare,

Jag körde igenom min databas med Phoca Changing Collation tool. Funkar fint enligt phpMyAdmin. Men ett fält som börjar med Ö syns nu inte alls när jag använder det fältet som sorteringskriterium i Views. Om jag tar bort sorteringskriteriet så syns det.

Är det ett problem med Views eller kollationeringen?

Edit: Ah, det var att bara 10 fält visades i visningen... sorry.

Klockrent, tack för info,

Coma's picture

Klockrent, tack för info, körde precis denna på min installation och vips så började views att sortera rätt!

Om man kör "Phoca Changing Collation tool", bör man köra "ALTER DATABASE database_name COLLATE = utf8_swedish_ci" dessutom.

Nix, det är det första kommandot som phoca-toolen gör så det behövs ej.

"Ett annat alternativ är

MorganG's picture

"Ett annat alternativ är detta skript: Phoca Changing Collation tool". Tack för tipset AdrianB, Phoca Changing Collation tool funkade utmärkt för mig :)

Morgan | Forweb

Tack!

angelg33k's picture

Jag tackar också väldigt mycket för tipset om Phoca Changing Collation tool och donerar även en slant till detta nyttiga verktyg.

Hi! I have a similar issue

gipsyx's picture

Hi!

I have a similar issue with french and german characters, are there informations in english on how to fix this? Thank you all for you help :)

If you're problem is that

AdrianB's picture

If you're problem is that your sort orders are wrong because of wrong collation on your columns in your tables, then I would recommend the Phoca Changing Collation tool (but as always, backup database first!).

The script lets you enter your database name, user name, password and what collation you want (like utf8_unicode_ci instead of utf8_general_ci since it's more accurate for German, more about MySQL unicode character sets).

Thank you so much Adrian,

gipsyx's picture

Thank you so much Adrian, that worked like a charm :)

Skapa databas med rätt kollationering från början

cato's picture

CREATE DATABASE name DEFAULT CHARSET "utf8" COLLATE "utf8_swedish_ci"

Det är ett bra råd om man

AdrianB's picture

Det är ett bra råd om man inte redan har en databas. Men om man sitter med sorteringsproblem i Views så kan jag sätta en slant på att man redan har en databas... ;)

Sitter man med viewsproblem

cato's picture

Sitter man med viewsproblem och har fel i databasen så är det bäst att dumpa och importera till ny databas eftersom mysql kan vara rent ut sagt dum i huvudet när det gäller collations :D

Anser du att det är en bättre

AdrianB's picture

Anser du att det är en bättre lösning än att använda Phoca-skriptet för att bara ändra collation?

Min praktiska erfarenhet är att skriptet fungerar utmärkt för detta ändamål utan några sidoeffekter, men jag är långt ifrån någon expert på MySQL.

Nä, det får du nog bestämma

cato's picture

Nä, det får du nog bestämma själv vilket du gillar bäst. Jag personligen litar inte riktigt på s.k. "tools" som ska fixa saker åt en. Med undantag för mysqls tuning-primer.sh kanske även om inte den heller är felfri.

Jag satt ett bra tag med collationproblem tidigare och testade allt möjligt innan jag gjorde på sättet jag föreslog och blev av med problemen. Sen är jag ju iofs mer eller mindre fanatisk terminalanvändare och skyr mysql-guis och tools som pesten...

Trevlig helg!

Det viktiga är väl att veta

AdrianB's picture

Det viktiga är väl att veta vad verktygen man använder egentligen gör.

Just i fallet med Phoca-skriptet så är det inga konstigheter, det handlar bara om att spara tid genom att slippa gå igenom fält för fält i tabell för tabell och utföra sådant som ALTER TABLE table MODIFY field COLLATE utf8_swedish_ci osv.

Även en terminalräv kan väl gilla att skripta repetitiva uppgifter? :)

Trevlig helg (på er alla!)

I had this problem and solved

MariaY's picture

I had this problem and solved by only via phpMyAdmin changing the collation in the structure of the title column in the node table from utf8_general_ci to utf8_swedish_ci as in the steps below. If anyone sees a problem with this method, please post here.

  1. open the dbase in phpMyAdmin
  2. click on the node table on the left
  3. click on the sturcture tab at the top
  4. for column 5 title, click on the change icon
  5. change the collation from utf8_general_ci to utf8_swedish_ci
  6. click on save
    Done!

This did not work for me

göran's picture

Changing only "node" table as above, did not solve the problem for me.
I had to dump the DB and change all the tables, read below, to get it to work.

// Göran

Inget nytt, vill egentligen

adamevertsson's picture

Inget nytt, vill egentligen bara lägga till att Phoca Changing Collation Tool finns än idag och fungerar finfint. Gjorde precis en genomgång på en databas och efter det sorterade Views ÅÄÖ korrekt.
http://www.phoca.cz/download/category/17-phoca-changing-collation-tool

// Adam




✄-----------------------------------------------------
Adam Evertsson - Came for the code, stayed for the community!

Drupal 8?

chrotto's picture

Har laddat upp tool_phoca_changing_collation till min Drupal 8 site men lyckas inte köra scriptet. Får meddelandet att sidan inte kan hittas. Detta trots att jag kopierat sökvågen till scriptet: minsite/tool_phoca_changing_collation/index.php för att undvika fel.
Är det någon rättighetsinställning någon stans som jag måste ställa om?

chrotto

göran's picture

Vid en dumpning av databasen så finns inte "utf8_general_ci" såsom ovanstående trådar förenklat påstår. Det går därför inte att köra ”sök & ersätt”.
Skälet är att "utf8_general_ci" är satt som "default" och att "collate" därför inte behöver vara med i tabellerna eftersom utf8_general_ci utgör "default settings" för alla databasens tabeller.
Det konstiga är att även om man skapar en tom tabell med utf8_swedish_ci så ändrar Drupal databasen till att bli utf8_general_ci när man lägger upp sidan (t o m Drupal 7.53). Jag tycker det är förvånande att det blir så med tanke på att språkvalet är satt som "svenskt" i drupal, när databasen fylls på och tabellerna skapas av Drupal 7.

Jag använder MAC och MAMP PRO (och Sequel Pro) som serverprogramvara.
Om förhållandet, som beskrivs ovan, skiljer sig och är specifikt för OS X med Mamp Pro så får någon gärna tala om det. isf gäller bara nedanstående för sådana förhållanden.

Jag kan inte köra Phoca Changing Collation tool. Varför det inte fungerar vet jag inte, men jag tror det beror på ”default setting” enligt nedanstående beskrivning.

Om man ska byta ut "collate = utf8_general_ci" till "collate = utf8_swedish_ci" genom sök och ersätt i en nerdumpad databas så krävs några moment till samt att man mer i detalj vet hur man ska göra.
Man måste lägga till "collate = utf8_swedish_ci" inne i flera av tabellens rader samt på nedersta raden.

varje tabellrad som initieras med:
varchar(32) NOT NULL DEFAULT

måste ändras till:
varchar(32) CHARACTER SET utf8 NOT NULL DEFAULT

Nedersta raden i varje tabell ser ut så här:
ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8;

ändras till:

ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

Tänk på att tömma cachen före det att du sparar en dumpning (jag brukar köra "trunk" direkt i DB, det tömmer allt).

// Göran

PHP 7

chrotto's picture

Kör Drupal 8.3.0 och php 7 och då fungerar inte denna version av scriptet.
Finns det en uppdaterad version av scriptet som man kan använda?

chrotto

Ny version av scriptet

chrotto's picture

Finns nu enn ny version av scriptet som fungerar med PHP 7.0
http://www.phoca.cz/download/category/1 ... ation-tool

chrotto

Har man drush så kan man

kristofferwiklund's picture

Har man drush så kan man laddar ner följande projekt (kan läggas i ~/.drush)
https://www.drupal.org/project/utf8mb4_convert

Sen kör man bara kommandot:
drush utf8mb4-convert-databases --collation=utf8mb4_swedish_ci

Scriptet kommer gå igenom alla tabeller och dess fält och konvertera det till utf8 med emojis stöd och korrekt sortering enligt svensk standard.

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: