Avatar billede the_saint Nybegynder
31. januar 2008 - 21:49 Der er 9 kommentarer og
1 løsning

Underlig sortering i mysql

Hej Eksperter.

Har lige et lidt underligt problem. Når jeg laver en select, og sortere på et varchar felt.. Så kan jeg få en liste som kunne være ligesom denne:
A
AA
Å  <-- HUH?!
B
C
D

Hvorfor får jeg Å lige efter A?
Avatar billede arne_v Ekspert
31. januar 2008 - 21:54 #1
Du kan angive din collation.
Avatar billede arne_v Ekspert
31. januar 2008 - 22:00 #2
Proev med:

COLLATE latin1_danish_ci
Avatar billede the_saint Nybegynder
01. februar 2008 - 16:32 #3
Mange tak, det virkede: Lavede følgende script til det:

$tables = mysql_query("SHOW TABLES LIKE '%'");
    while($table = mysql_fetch_array($tables))
    {
        $fields = array();
        $_table = $table[0];
        mysql_query("ALTER TABLE ".$_table." DEFAULT CHARACTER SET utf8 COLLATE utf8_danish_ci");
        print mysql_error();
        print $_table."<br />";
        $columns = mysql_query("SHOW COLUMNS FROM ".$_table);
        while($column = mysql_fetch_array($columns))
        {

            if(strtolower(substr($column[1], 0, 7)) == "varchar" || strtolower($column[1]) == "text" || strtolower(substr($column[1], 0, 4)) == "char" )
            {
                $fields[] = $column[0];
                mysql_query("ALTER TABLE ".$_table." CHANGE `".$column[0]."` `".$column[0]."` ".$column[1]." CHARACTER SET utf8 COLLATE utf8_danish_ci");
            }
        }
    }
Avatar billede arne_v Ekspert
01. februar 2008 - 16:36 #4
saa smider jeg et svar
Avatar billede the_saint Nybegynder
01. februar 2008 - 16:41 #5
Og der har du lidt point :o)
Avatar billede the_saint Nybegynder
01. februar 2008 - 16:57 #6
Hmm,underligt.. Nu sortere den Å før A? På min ene server altså, på den anden server der sortere den rigtigt (Min localhost).. Jeg har kørt samme script på begge servere, og de skulle gerne være identiske.

Hvis jeg går ind i phpmyadmin, så viser den ene sig sådan her:
Ã…sa (Det er den som sortere forkert), men den anden viser sig som Åsa (En værdi i et felt).

Men hvorfor er det sådan, når begge databaser har samme collation og charset?
Avatar billede arne_v Ekspert
03. februar 2008 - 05:35 #7
Ã…sa lyder altså meget som UTF-8 fortolket som ISO-8859-1.

Check charset igen !
Avatar billede the_saint Nybegynder
03. februar 2008 - 11:40 #8
CREATE TABLE `contacts_users` (
  `id` int(10) NOT NULL auto_increment,
  `brugernavn` varchar(64) collate utf8_danish_ci default NULL,
  `kodeord` varchar(64) collate utf8_danish_ci default NULL,
  `initialer` varchar(4) collate utf8_danish_ci default NULL,
  `navn` varchar(64) collate utf8_danish_ci default NULL,
  `adresse1` varchar(64) collate utf8_danish_ci default NULL,
  `adresse2` varchar(64) collate utf8_danish_ci default NULL,
  `postnr` int(6) default NULL,
  `by` varchar(64) collate utf8_danish_ci default NULL,
  `id_land` int(10) default NULL,
  `email` varchar(64) collate utf8_danish_ci default NULL,
  `telefon` varchar(16) collate utf8_danish_ci default NULL,
  `hjemmeside` varchar(64) collate utf8_danish_ci default NULL,
  `msn` varchar(64) collate utf8_danish_ci default NULL,
  `skype` varchar(64) collate utf8_danish_ci default NULL,
  `lvl` int(1) default '0',
  `dato_format` varchar(10) collate utf8_danish_ci default NULL,
  `last_login` timestamp NULL default NULL,
  `instant_edit` int(1) default '1',
  `active` int(1) default '1',
  `start_view` int(1) default '0',
  `note` text collate utf8_danish_ci,
  `default_vat` int(3) default '25',
  `default_fee` int(5) default '0',
  `default_freight` int(5) default '0',
  `default_currency` int(10) default '0',
  `default_stock` int(10) default '0',
  `can_set_invoice` int(1) default '0',
  `order_count` int(10) default '1000',
  `fax` varchar(64) collate utf8_danish_ci default NULL,
  `telefon2` varchar(64) collate utf8_danish_ci default NULL,
  `invoice_address` text collate utf8_danish_ci,
  `commission` int(11) default '10',
  `cvr` varchar(32) collate utf8_danish_ci default NULL,
  `default_user` int(10) default '0',
  `default_country` int(10) default '0',
  `default_entry_type` int(10) default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=85 DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci COMMENT='List over all users';

Det er mit create statement.. Jeg har lige opdaget den ene (den som fejler) kun er en mysql 4.1, mens min localhost er mysql 5.1 - kan det have noget at sige?
Avatar billede arne_v Ekspert
03. februar 2008 - 15:22 #9
Ja.

Der er tilføjet en del til charset og collation i både 4.0->4.1 og 4.1->5.0
(5.1 er vist stadig i beta).
Avatar billede the_saint Nybegynder
03. februar 2008 - 15:34 #10
Jeg fik ordnet det nu, så nu er data ens i begge mine tabeller :) Tak for hjælpen.
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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