Mysql 中文排序规则说明
使用MySQL过程中,我们经常会对一个字段进行排序查询,我们一般都是想要按照中文拼音首字母进行依次排序,但mysql中进行中文排序的时候,对汉字的排序结果往往都是错误的。
这种情况在MySQL的很多版本中都存在。
如果这个问题不解决,那么MySQL将无法实际处理中文。
出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。
查了资料有两种解决方法:
1.对于包含中文的字段加上”binary”属性,使之作为二进制比较,例如将”namevarchar(10)”改成”namevarchar(10)binary”。
2.如果不想对表结构进行修改或者重新编译MySQL,也可以在查询语句的orderby部分使用CONVERT函数。
比如name字段为中文,需要按其排序,则可以写select*frommytableorderbyCONVERT(nameUSINGgbk);
补充:mysql数据库默认排序问题
1、mysql官方回答:
SELECT*FROMtbl--thiswilldoa"tablescan".IfthetablehasneverhadanyDELETEs/REPLACEs/UPDATEs,therecordswillhappentobeintheinsertionorder,hencewhatyouobserved.
大致意思为,一个myisam引擎表在没有任何的删除,修改操作下,执行select不带orderby,那么会按照插入顺序进行排序。
IfyouhaddonethesamestatementwithanInnoDBtable,theywouldhavebeendeliveredinPRIMARYKEYorder,notINSERTorder.Again,thisisanartifactoftheunderlyingimplementation,notsomethingtodependon.
对于innodb引擎表来说,在相同的情况下,select不带orderby,会根据主键来排序,从小到大
2、查看数据库引擎命令:
(1)查看某个表使用的引擎
showcreatetable;
(2)查看mysql支持哪些引擎
showengines;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。