Sortering på utf8 tekstfelt mysql

Diskusjoner som omhandler databaser og SQL postes her.

Sortering på utf8 tekstfelt mysql

Innlegg bgpro » 03.12.2008 11:28

Hei,

har en tabell (fornavn, etternavn osv) der data er laget som utf8 i en tabell med collation utf8_danish_ci.

Når jeg sorterer på f.eks fornavn i spørringen vil navn som starter med Æ, Ø eller Å komme sammen med A.

Hva skal til for å få fornavn som starter med æ, ø og å til å komme i alfabetisk rekkefølge?

Noen som har erfaring med problemstillingen?
bgpro
Medlem
 
Innlegg: 31
Registrert: 25.04.2007 22:25
Bosted: Oslo

Re: Sortering på utf8 tekstfelt mysql

Innlegg NIc0 » 03.12.2008 16:39

hmm. laget en test tabell i min mySQL 5.
Hadde utf8_danish_ci som collation på både tabellen, databasen og serveren og uansett hva jeg prøvde så kom det i "riktig rekkefølge" (æ, ø, å helt til slutt)

mulig det er noen andre faktorer i din database som skaper problemet. Kanskje vi kan få se litt SQL?

test tabellen:
Kode: Merk alt
--
-- Tabellstruktur for tabell `sorteringer`
--

CREATE TABLE `sorteringer` (
  `id` tinyint(4) NOT NULL auto_increment,
  `navn` varchar(30) collate utf8_danish_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=7 ;

--
-- Dataark for tabell `sorteringer`
--

INSERT INTO `sorteringer` (`navn`) VALUES
('arne'),
('jørgen'),
('knut'),
('ole'),
('ærlend'),
('yosef'),
('øysten');
Ask a question and be a fool for five minutes. Dont ask your question and be a fool for life!
Brukerens avatar
NIc0
Medlem
 
Innlegg: 898
Registrert: 11.10.2005 23:55
Bosted: str0mmen

Re: Sortering på utf8 tekstfelt mysql

Innlegg bgpro » 03.12.2008 16:51

Kjører Mysql 5 selv med utf-8 unicode tegnsett, utf8_danish_ci på database og tabell..

Sql i forenklet testversjon:

mysql_query("SELECT fornavn, etternavn FROM personer ORDER BY fornavn ASC");

Et eksempel på lagret navn med æøå:

Ørjan = Ørjan

Det er vel her problemet oppstår, men er ikke dette korrekt måte å lagre på?
bgpro
Medlem
 
Innlegg: 31
Registrert: 25.04.2007 22:25
Bosted: Oslo

Re: Sortering på utf8 tekstfelt mysql

Innlegg NIc0 » 03.12.2008 17:14

så vidt jeg vet bør bokstavene lagres korrekt om du bruker utf8_danish
http://www.collation-charts.org/mysql60 ... sh_ci.html
og sortering der etter som du ser av linken over
Ask a question and be a fool for five minutes. Dont ask your question and be a fool for life!
Brukerens avatar
NIc0
Medlem
 
Innlegg: 898
Registrert: 11.10.2005 23:55
Bosted: str0mmen

Re: Sortering på utf8 tekstfelt mysql

Innlegg DavidS » 03.12.2008 18:46

Det er utskriften du får problemer med? At ÆØÅ ikke vises korrekt?
viewtopic.php?p=278904#p278904
DavidS
Seniormedlem
 
Innlegg: 3667
Registrert: 17.05.2006 17:08

Re: Sortering på utf8 tekstfelt mysql

Innlegg bgpro » 04.12.2008 15:48

Utskriften vises korrekt - det er ikke problemet. Bokstavene vises riktig på web.

Problemet ligger i alfabetisk sortering av resultatet fra spørringen da æ, ø og å ligger som kryptiske tegn i databasen.
bgpro
Medlem
 
Innlegg: 31
Registrert: 25.04.2007 22:25
Bosted: Oslo

Re: Sortering på utf8 tekstfelt mysql

Innlegg NIc0 » 04.12.2008 15:53

uten å være sikker kan det virke om om problemet oppstår ved lagring, ikke ved henting av dataen. de burde være lagret med riktige tegn.
Ask a question and be a fool for five minutes. Dont ask your question and be a fool for life!
Brukerens avatar
NIc0
Medlem
 
Innlegg: 898
Registrert: 11.10.2005 23:55
Bosted: str0mmen

Re: Sortering på utf8 tekstfelt mysql

Innlegg bgpro » 04.12.2008 16:05

Ok,

så æ ø å skal ligge slik i databasen når man har utf8 som tegnsett?

Da ser det for meg ut som man må over på vesteuropeisk/latin tegnsett for å få dette til!?

Kort oppsummering av oppsett i systemet:

HTML-charset: utf-8
PHP-filer lagres med utf8 encoding
Mysql: utf8 unicode
Database: utf8_danish_ci
Tabell: utf8_danish_ci

Har jeg misset på noe essensiellt her?
bgpro
Medlem
 
Innlegg: 31
Registrert: 25.04.2007 22:25
Bosted: Oslo

Re: Sortering på utf8 tekstfelt mysql

Innlegg tdo » 04.12.2008 17:27

I utgangspunktet bør det se ut som æ, ø, å når det ligger i databasen, men det igjen er jo avhengig av hvilket charset det vises i.

Kan det hende at input ikke er utf8, altså hvis jeg sender noe til deg i et annet charset og du åpner det utf8 kan det medføre problemer. Gjør en test på teksten du setter inn:
Kode: Merk alt
    function is_utf8($string) {
      
        
// From http://w3.org/International/questions/qa-forms-utf-8.html
        
return preg_match('%^(?:
              [\x09\x0A\x0D\x20-\x7E]            # ASCII
            | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
            |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
            | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
            |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
            |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
            | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
            |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
        )*$%xs'
$string);
      
    }  

(Tatt fra PHP-Manualen om utf8_encode)
Brukerens avatar
tdo
Seniormedlem
 
Innlegg: 1523
Registrert: 27.01.2005 23:35
Bosted: Oslo

Re: Sortering på utf8 tekstfelt mysql

Innlegg bgpro » 04.12.2008 17:45

Funksjonen returnerer 1 på teksten som skrives til databasen, så den er utf8.

Noen andre som har gode innspill så mottas dette med takk!
bgpro
Medlem
 
Innlegg: 31
Registrert: 25.04.2007 22:25
Bosted: Oslo

Re: Sortering på utf8 tekstfelt mysql

Innlegg toni » 01.02.2010 13:12

Om hele tabellen din er i utf8, og du vil sortere en spesifikk row slik ÆØÅ kommer der det skal være så kan du bruke latin1_bin så vil det fungere.
Brukerens avatar
toni
Medlem
 
Innlegg: 160
Registrert: 26.09.2008 15:03
Bosted: Ålesund

Re: Sortering på utf8 tekstfelt mysql

Innlegg pusle » 18.07.2013 13:24

"select * from ... order by fornavn collate utf8_danish_ci"
pusle
Nytt medlem
 
Innlegg: 1
Registrert: 18.07.2013 13:19

Re: Sortering på utf8 tekstfelt mysql

Innlegg adeneo » 18.07.2013 13:55

Vi får håpe problemet er løst etter tre og et halvt år ?
adeneo
Medlem
 
Innlegg: 628
Registrert: 08.04.2011 21:09


Gå til SQL og databaser

Hvem er i forumet

Brukere som leser i dette forumet: Ingen registrerte brukere og 4 gjester