当我使用order by name
语句name
varchar(255)
类型name
时,我的服务器上的MySQL如果首先具有相同的20,则不会按正确的顺序放置记录name
字段的字符。似乎MySQL根本不关心第21个字符:它实际上在按降序排序时保留了相同的错误顺序。
我在另一个MySQL安装上复制了我的表,一切都很好。但是我如何处理服务器上的这种限制呢?我无法在那里重新安装MySQL,因为我正在使用共享主机。
更新:cp1251_general_ci
字段不属于任何索引,并且在此字段上创建索引也无济于事。
MySQL版本是5.1.55,引擎是MyISAM。
更新2 :我最初使用'123456789012345678901'/'123456789012345678902'
排序规则但后来我尝试了其他排序规则并得到了完全相同的结果。对于使用'abcdefghijklmnopqrstauvwxyz'/'abcdefghijklmnopqrstbuvwxyz'
和ORDER BY substring(
的字符串,结果相同。name
, 2)
排序似乎没有考虑从21日开始的所有角色,但是否则它正在按预期工作。
有趣的是,当使用name
时,第21个字符很重要,但第22个字符不重要。
答案 0 :(得分:3)
你可以查看你的max_length_for_sort_data和max_sort_length变量吗?默认值为1024,如果您将其中一个设置为20,则可以解释所有内容。
mysqladmin -u root -p variables | grep sort
Enter password:
| max_length_for_sort_data | 1024 |
| max_sort_length | 1024 |
| myisam_max_sort_file_size | 2146435072 |
| myisam_sort_buffer_size | 8388608 |
| optimizer_switch | index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on |
| sort_buffer_size | 2097144 |
您可以在ORDER BY optimisation定义中找到更多信息max_length_sort_data mysql服务器手册章节。