看来,当我使用具有类型的order by name
语句时,如果它们具有相同的 20 个字段的第一个字符,则我服务器上的 MySQL 不会按正确的顺序放置记录。似乎 MySQL 根本不关心第 21 个字符:当按降序排序时,它实际上保留了相同的错误顺序。name
varchar(255)
name
我在另一个 MySQL 安装上复制了我的表,那里一切正常。但是对于服务器上的这种限制,我该怎么办?我无法在那里重新安装 MySQL,因为我使用的是共享主机。
更新:该name
字段不属于任何索引,在该字段上创建索引也无济于事。
MySQL 版本是 5.1.55,引擎是 MyISAM。
更新 2:我最初使用cp1251_general_ci
排序规则,但后来我尝试了其他排序规则并得到了完全相同的结果。'123456789012345678901'/'123456789012345678902'
对于我使用and的字符串'abcdefghijklmnopqrstauvwxyz'/'abcdefghijklmnopqrstbuvwxyz'
,结果相同。
排序似乎没有考虑从 21 日开始的所有字符,但除此之外它可以正常工作。
有趣的是,当使用第 21 个字符时很重要,但第 22 个字符不重要。ORDER BY substring(
name
, 2)