时间:2021-05-02
使用MySQL过程中,我们经常会对一个字段进行排序查询,我们一般都是想要按照中文拼音首字母进行依次排序,但mysql中进行中文排序的时候,对汉字的排序结果往往都是错误的。
这种情况在MySQL的很多版本中都存在。
如果这个问题不解决,那么MySQL将无法实际处理中文。
出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。
1.对于包含中文的字段加上”binary”属性,使之作为二进制比较,例如将”name varchar(10)”改成”name varchar(10)binary”。
2. 如果不想对表结构进行修改或者重新编译MySQL,也可以在查询语句的 order by 部分使用 CONVERT 函数。
比如 name字段为中文,需要按其排序,则可以写select * from mytable order by CONVERT(name USING gbk);
补充:mysql数据库默认排序问题
SELECT * FROM tbl -- this will do a "table scan". If the table has never had any DELETEs/REPLACEs/UPDATEs, the records will happen to be in the insertion order, hence what you observed.
大致意思为,一个myisam引擎表在没有任何的删除,修改操作下,执行 select 不带order by,那么会按照插入顺序进行排序。
If you had done the same statement with an InnoDB table, they would have been delivered in PRIMARY KEY order, not INSERT order. Again, this is an artifact of the underlying implementation, not something to depend on.
对于innodb引擎表来说,在相同的情况下,select 不带order by,会根据主键来排序,从小到大
(1)查看某个表使用的引擎
? 1 show create table ;(2)查看mysql支持哪些引擎
? 1 show engines;以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/qq_42043982/article/details/84953665
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
MySQL对中文进行排序详解MySQL默认只支持对日期、时间和英文字符串进行排序,如果对中文进行orderby很可能得不到想要的结果,如下面的查询并不会按我们所
本文实例讲述了PHP与MYSQL中UTF8编码的中文排序方法,分享给大家供大家参考。具体实现方法如下:一般来说,中文共有三种排序方式:1.根据拼音排序;2.根据
下面摘录一下Mysql5.1中文手册中关于utf8_unicode_ci与utf8_general_ci的说明:当前,utf8_unicode_ci校对规则仅部
MySQL常规排序、自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序。下面给出3种比较常用的排序方式,mark一下1.常规
mysql中文排序方法1mysql在查询字符串时是大小写不敏感的,在编绎mysql时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大