1

我有一张名为公司的表,如下所示。

CREATE TABLE IF NOT EXISTS `companies` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `name` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

该表的 MySQL 表数据如下。

INSERT INTO `companies` (`id`, `user_id`, `name`) VALUES
(1, 2, 'Mylan'),
(2, 1, 'Intas'),
(3, 48, 'Glenmark'),
(4, 21, 'Amipharma'),
(5, 1, 'XEPA SOUL');

现在,当我使用以下查询对记录进行排序时

SELECT * FROM companies ORDER BY name ASC;

我回来了。

  • XEPA 灵魂
  • 阿米制药
  • 格伦马克
  • 英塔斯
  • 迈兰

这是错误的,因为X它首先出现,它必须最后显示。

我不知道为什么会这样。

请给出一些提示或解释,以便我可以纠正这个问题。

谢谢

4

4 回答 4

3

您可以使用 LTRIM() 删除左边的空格,

  SELECT * FROM companies ORDER BY LTRIM(name) ASC;
于 2013-04-08T11:53:56.137 回答
2

为了获得最佳效果,您可以使用 orderby 作为 id

SELECT * FROM Companies ORDER BY id ASC;

于 2013-04-08T12:55:37.837 回答
1

正如评论中的其他人所说,我认为您在 XEPA SOUL 前面有一个额外的空白。如果你愿意,你可以在条款中修剪你的数据ORDER BY

SELECT * FROM companies ORDER BY TRIM(name) ASC;
于 2013-04-08T11:14:17.890 回答
1

默认字符集和排序规则是 latin1 和 latin1_swedish_ci,因此默认情况下非二进制字符串不区分大小写。这是排序规则设置的问题。试试这个

SELECT * FROM Companies ORDER BY CONVERT (name USING latin2) ASC

于 2013-04-08T11:20:48.837 回答