MySQL排序没有按预期工作


MySQL sorting not working as expected

我有一个名为companies的表,如下所示。

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;

this I返回。

  • XEPA灵魂
  • Amipharma
  • Glenmark
  • inta
  • Mylan

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

我不知道为什么会这样。

请给点提示或解释,以便我改正。

谢谢

可以使用LTRIM(),

  SELECT * FROM companies ORDER BY LTRIM(name) ASC;

为获得最佳效果,您可以对id

使用order。

正如其他人在评论中所说,我认为您在XEPA SOUL前面有一个额外的空白。如果需要,可以在ORDER BY子句中修剪数据:

SELECT * FROM companies ORDER BY TRIM(name) ASC;

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

SELECT * FROM companies ORDER BY CONVERT (name USING latin2)