我有一个名为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,因此默认情况下非二进制字符串不区分大小写。这是排序设置的问题。试试这个