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?
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");
}
}
}
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?
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?