Gå til innhold

Hjelp! Får ikke mysql til å sortere riktig alfabetisk


Anbefalte innlegg

Når jeg prøver å sortere en kolonne i mysql så kommer ø, æ å, a, b, c......

hva er gjort galt? jeg har prøvd å fulgt en guide her på forumet men det ble ikke bedre.. egentlig verre. Hvis jeg nå skal vise alle treff i en kolonne med 'a%' så kommer ø,æ,å med ... utrolig irriterende..

mysql> show create table Kommune;
  +---------+---------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  -------------------------------------------------------------------+
  | Table   | Create Table






																  |
  +---------+---------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  -------------------------------------------------------------------+
  | Kommune | CREATE TABLE `Kommune` (
 `komm_nr` char(4) collate utf8_danish_ci NOT NULL,
 `k_navn` varchar(30) collate utf8_danish_ci NOT NULL,
 `adminsenter` varchar(40) collate utf8_danish_ci default NULL,
 `fylke` char(2) collate utf8_danish_ci NOT NULL,
 `folketall` int(7) default NULL,
 `areal` float(7,2) default NULL,
 `ordforer` varchar(50) collate utf8_danish_ci default NULL,
 PRIMARY KEY  (`komm_nr`),
 KEY `fylke` (`fylke`),
 CONSTRAINT `Kommune_ibfk_1` FOREIGN KEY (`fylke`) REFERENCES `Fylke` (`fylkesn
  r`) ON DELETE CASCADE ON UPDATE CASCADE
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci |
  +---------+---------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  --------------------------------------------------------------------------------
  -------------------------------------------------------------------+
  1 row in set (0.00 sec)

Det jeg forrandret fra tidligere va å legge til COLLATE=utf8_danish_ci der tidligere var default... Dette gjorde sorteringen enda dårligere.

Min nettside er skrevet i utf8 format med

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <link rel="stylesheet" type="text/css" href="css/style.css" media="screen" />
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

deklarasjon, men feilen ligger nok i mysql siden jeg får samme sorteringen i mysql ved bruk av console..

 

Noen som ser raskt hva jeg kan gjøre får å rette feilen?

Lenke til kommentar
Videoannonse
Annonse
Hvordan henter du ut info fra tabellen? - du har vell en sql settning vi kan se på?

$kommune_query = "SELECT komm_nr, k_navn FROM Kommune
				 WHERE k_navn like '$alfabet" . "%'" .
				 'ORDER BY k_navn';

$kommune_resultat = @mysql_query($kommune_query) OR die('Feil i Spørring!');

Hvis da $alfabet='a' ; blir sorteringen ø,å,a,

Endret av Rizzla
Lenke til kommentar

 

Databasen har char set=uft8 og COLLATE=utf8_danish_ci

Det samme gjelder alle tabeller

Lenke til kommentar

Hmm, nå har jeg testet flere typer COLLATE og fant ut at den som gav rett sortering var utf8_bin.. Takk til OIS som fikk meg til å prøve ved hjelp av linkene. Bare litt rart at jeg blir nødt for å sortere med COLLATE utf8_bin....

select k_navn from Kommune ORDER BY k_navn COLLATE utf8_bin;

 

Databasen har char set=uft8 og COLLATE=utf8_danish_ci

Det samme gjelder alle tabeller

Får du feil sortering hvis du prøver dette også?

 

ORDER BY k_navn COLLATE utf8_danish_ci;

 

 

jepp

Lenke til kommentar

Litt hjelp kan sette deg på riktig spor. :)

 

Tror denne bug reporten gjelder det samme problemet halveis ned i kommentarene. Nederst ser det ut som en har funnet et svar på dette.

 

[11 Mar 2008 12:20] Jo Inge Arnes

 

Thank you for answering so soon, Alexander Barkov.

 

I have found a solution. The problem was that the collation wasn't set for the column,

only the table, server, connection and so on. By using 'alter table' and changing the

specific column to use utf8_danish_ci the problem disappeared, and I didn't have to use

collate-keyword in the queries.

 

Using the collate-keyword for varchar/char-columns in the queries prevented the correct

index to be used and made the queries extremely slow. After altering the column to the

correct collation, I no longer had to use the keyword in the queries to get the correct

results.

Lenke til kommentar
Litt hjelp kan sette deg på riktig spor. :)

 

Tror denne bug reporten gjelder det samme problemet halveis ned i kommentarene. Nederst ser det ut som en har funnet et svar på dette.

 

[11 Mar 2008 12:20] Jo Inge Arnes

 

Thank you for answering so soon, Alexander Barkov.

 

I have found a solution. The problem was that the collation wasn't set for the column,

only the table, server, connection and so on. By using 'alter table' and changing the

specific column to use utf8_danish_ci the problem disappeared, and I didn't have to use

collate-keyword in the queries.

 

Using the collate-keyword for varchar/char-columns in the queries prevented the correct

index to be used and made the queries extremely slow. After altering the column to the

correct collation, I no longer had to use the keyword in the queries to get the correct

results.

Ser ut som jeg har rett COLLATE på alle kolonnene også. Det står vertfall collate utf8_danish_ci bak hver enkelt av dem... Kan det hende at ikke selve tabellene er i utf8_danish_ci ??

Kan du helpe meg med en syntax/spørring for å finne ut hvilken charset og collate en tablell har?

jeg har bare brukt: show create table Fylke;

Lenke til kommentar

nope, utf8_unicode_ci gir feil i rekkefølgen. Eneste som funker her er å sortere ORDER BY '' COLLATE utf8_bin

 

Vel funker vertfall... bare rart ikke flere har problemet jeg har....

 

 

Databasen:

mysql> show create database raymonds;
+----------+--------------------------------------------------------------------
----------------------+
| Database | Create Database
				   |
+----------+--------------------------------------------------------------------
----------------------+
| raymonds | CREATE DATABASE `raymonds` /*!40100 DEFAULT CHARACTER SET utf8 COLL
ATE utf8_danish_ci */ |
+----------+--------------------------------------------------------------------
----------------------+
1 row in set (0.00 sec)

 

 

En av tabellene(alle er som denne)

mysql> show create table Fylke;
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------+
| Table | Create Table





			|
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------+
| Fylke | CREATE TABLE `Fylke` (
  `fylkesnr` char(2) collate utf8_danish_ci NOT NULL,
  `f_navn` varchar(30) collate utf8_danish_ci default NULL,
  `info` varchar(2500) collate utf8_danish_ci default NULL,
  `internettside` varchar(100) collate utf8_danish_ci default NULL,
  `fylkesmann` varchar(50) collate utf8_danish_ci default NULL,
  `fylkesordforer` varchar(50) collate utf8_danish_ci default NULL,
  PRIMARY KEY  (`fylkesnr`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------+
1 row in set (0.00 sec)

Lenke til kommentar

Søk med COLLATE utf8_danish_ci

gir feil rekkefølge:

mysql> SELECT f_navn FROM Fylke ORDER BY f_navn COLLATE utf8_danish_ci;
+------------------+
| f_navn		   |
+------------------+
| Østfold		 |
| Akershus		 |
| Aust-Agder	   |
| Buskerud		 |
| Finnmark		 |
| Hedmark		  |
| Hordaland		|
| Møre og Romsdal |
| Nord-Trøndelag  |
| Nordland		 |
| Oppland		  |
| Oslo			 |
| Rogaland		 |
| Sør-Trøndelag  |
| Sogn og Fjordane |
| Telemark		 |
| Troms			|
| Vest-Agder	   |
| Vestfold		 |
+------------------+
19 rows in set (0.00 sec)

 

 

Søk med COLLATE utf8_unicode_ci

gir feil rekkefølge:

mysql> SELECT f_navn FROM Fylke ORDER BY f_navn COLLATE utf8_unicode_ci;
+------------------+
| f_navn		   |
+------------------+
| Østfold		 |
| Akershus		 |
| Aust-Agder	   |
| Buskerud		 |
| Finnmark		 |
| Hedmark		  |
| Hordaland		|
| Møre og Romsdal |
| Nord-Trøndelag  |
| Nordland		 |
| Oppland		  |
| Oslo			 |
| Rogaland		 |
| Sør-Trøndelag  |
| Sogn og Fjordane |
| Telemark		 |
| Troms			|
| Vest-Agder	   |
| Vestfold		 |
+------------------+
19 rows in set (0.00 sec)

 

 

Søk med COLLATE utf8_bin

gir rett rekkefølge:

mysql> SELECT f_navn FROM Fylke ORDER BY f_navn COLLATE utf8_bin;
+------------------+
| f_navn		   |
+------------------+
| Akershus		 |
| Aust-Agder	   |
| Buskerud		 |
| Finnmark		 |
| Hedmark		  |
| Hordaland		|
| Møre og Romsdal |
| Nord-Trøndelag  |
| Nordland		 |
| Oppland		  |
| Oslo			 |
| Rogaland		 |
| Sogn og Fjordane |
| Sør-Trøndelag  |
| Telemark		 |
| Troms			|
| Vest-Agder	   |
| Vestfold		 |
| Østfold		 |
+------------------+
19 rows in set (0.00 sec)

Lenke til kommentar

utf8_bin er en stygg løsning på dette problemet. Problemet her er at PHP pr. default kobler seg til MySQL med ISO-8859-1/latin1, hvilket åpenbart er riv ruskende galt. Det du trenger å gjøre er å kjøre følgende spørring etter du har åpnet tilkoblingen.

SET NAMES 'utf8' COLLATE 'utf8_danish_ci'

Lenke til kommentar
utf8_bin er en stygg løsning på dette problemet. Problemet her er at PHP pr. default kobler seg til MySQL med ISO-8859-1/latin1, hvilket åpenbart er riv ruskende galt. Det du trenger å gjøre er å kjøre følgende spørring etter du har åpnet tilkoblingen.

SET NAMES 'utf8' COLLATE 'utf8_danish_ci'

Det kan nok hende at dette er en stygg løsning, men å få PHP til å koble seg til MySQL ved hjelp av SET NAMES 'utf8' COLLATE 'utf8_danish_ci funker ikke. Som jeg har skrevet tidligere kommer søkresultatet feil OGSÅ om jeg logger direkte inn i MySQL ved hjelp av console....

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...