我们都知道, mysql 的索引会对数据进行排序然后再进行存放.
但是我一直以来都有一个问题, 这个排序的标准/依据是什么? 对于不同的字段值, mysql 如何判断他们谁大谁小,谁在前谁在后?
从人类的逻辑来说,如果索引字段值是整型或者浮点型,那排序的标准和方案很好理解,无非就是2>1, 1<2的问题,但是往往我们的索引都是字符串类型,甚至是汉字,二进制数据,mysql 是如何对这些数据进行排序,排序的依据是什么呢?
我的猜测是mysql 内部将所有的数据都转换为整数,然后进行统一的判断,如果真的是这样,这个转换成整数的逻辑又是啥?
请大家赐教~~
MySQL的字符串类型(
CHAR
、VARCHAR
或TEXT
)有一个叫COLLATE
(校对)的属性,专门用来比较和排序的。这个属性非常有趣,用
gbk_chinese_ci
的话就是按照拼音排序,不过用utf8_general_ci
的话就比较混乱了。这里不详细展开,可以搜一下MySQL相关文档。