Avatar billede whatever Nybegynder
24. juni 2008 - 11:39 Der er 7 kommentarer og
1 løsning

MySQL henter forkerte rækker ud

Hej,

Jeg er løbet ind et problem med en query der henter for mange poster ud.

Min query er følgende:

SELECT id, title FROM table WHERE title = 'spån'

Det returnerer følgende to poster:

3243, span
3456, spån

Jeg kun interesseret i at få posten hvor title faktisk er spån, og ikke hvor det er span.

Benytter MySQL 5.0.37 og tabellerne benytter InnoDB og UTF-8.

Nogen der har en løsning på problemet?
Avatar billede pidgeot Nybegynder
24. juni 2008 - 11:43 #1
Hvad er din collation på feltet/tabellen?
Avatar billede whatever Nybegynder
24. juni 2008 - 11:47 #2
På både tabel og felt er den utf8_general_ci
Avatar billede pidgeot Nybegynder
24. juni 2008 - 11:49 #3
Og det er dit problem :)

Å betragtes som en alternativ udgave af A hvis din collation ikke dækker noget der bør have kendskab til Å, og den skelner derfor ikke mellem dem.

Skift collation til utf8_danish_ci, så funker det.
Avatar billede whatever Nybegynder
24. juni 2008 - 12:19 #4
Ok.... har lige testet det og kan godt se det løser problemet. Så det store spørgsmål:

På sigt skal sitet uder over engelsk og dansk muligvis også indeholde polske ting i samme tabel. Vil det ikke give problemer med det polske, hvis mine felter har benytter collation utf8_danish_ci?
Avatar billede whatever Nybegynder
24. juni 2008 - 12:48 #5
Jeg tilføjede "COLLATE utf8_danish_ci" i mine SELECT queries, hvilket løse problemet.

Smid et svar og ud får nogle point ;-)
Avatar billede pidgeot Nybegynder
24. juni 2008 - 12:55 #6
Ja og nej. Du kan uden problemer gemme tingene - collation påvirker kun sortering og sammenligning - men du vil sandsynligvis opleve samme problem som her; særlige polske tegn bliver behandlet ved sortering og sammenligning som om de var "grundtegnet". Jeg er ikke bekendt med en collation der bettragter både polske og danske tegns om individuelle - måske er utf8_bin, men den er også case-sensitive, hvilket normalt ikke er hensigtsmæssigt.

Det er i øvrigt muligt at overstyre collation for en specifik forespørgsel hvis det kun er enkeltscenarier du skal bruge en specifik sortering/sammenligning. Tag et kig på http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html.
Avatar billede pidgeot Nybegynder
24. juni 2008 - 12:56 #7
Værsgo :)

Hvis du har et primært sprog til dit indhold, er det bedst at bruge en matchende collation - så risikerer du ikke at "glemme den" i en query.
Avatar billede whatever Nybegynder
24. juni 2008 - 13:56 #8
Jeg fandt godt siden du referer til, og der var der jeg fandt løsning med COLLATE.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester