Rizzla Skrevet 12. januar 2009 Del Skrevet 12. januar 2009 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
Wackamole Skrevet 12. januar 2009 Del Skrevet 12. januar 2009 Hvordan henter du ut info fra tabellen? - du har vell en sql settning vi kan se på? Lenke til kommentar
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 (endret) 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 12. januar 2009 av Rizzla Lenke til kommentar
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 Tenkte at jeg kanskje bare kunne legge ut url'en her jeg.. Sjekk her Lenke til kommentar
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 Shit, jeg kom til skade for å legge ut kildekoden med fullt login og passord til mysql. EID! Lenke til kommentar
OIS Skrevet 12. januar 2009 Del Skrevet 12. januar 2009 Kas character set og collation har databasen/tabellen? Du må sette dette riktig. http://dev.mysql.com/doc/refman/5.0/en/cha...ion-effect.html http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html http://dev.mysql.com/doc/refman/5.0/en/show-collation.html http://dev.mysql.com/doc/refman/6.0/en/cha...figuration.html Lenke til kommentar
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 Kas character set og collation har databasen/tabellen? Du må sette dette riktig. http://dev.mysql.com/doc/refman/5.0/en/cha...ion-effect.html http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html http://dev.mysql.com/doc/refman/5.0/en/show-collation.html http://dev.mysql.com/doc/refman/6.0/en/cha...figuration.html Databasen har char set=uft8 og COLLATE=utf8_danish_ci Det samme gjelder alle tabeller Lenke til kommentar
OIS Skrevet 12. januar 2009 Del Skrevet 12. januar 2009 Databasen har char set=uft8 og COLLATE=utf8_danish_ciDet samme gjelder alle tabeller Får du feil sortering hvis du prøver dette også? ORDER BY k_navn COLLATE utf8_danish_ci; Lenke til kommentar
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 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_ciDet 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
OIS Skrevet 12. januar 2009 Del Skrevet 12. januar 2009 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
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 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
OIS Skrevet 12. januar 2009 Del Skrevet 12. januar 2009 Då vet eg ikke noe mer. Men utf8_danish_ci skal sortere det riktig. Lenke til kommentar
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 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
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 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
Ernie Skrevet 12. januar 2009 Del Skrevet 12. januar 2009 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
Rizzla Skrevet 12. januar 2009 Forfatter Del Skrevet 12. januar 2009 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå