标签分类 技术文章:
当前位置:首页 > Mysql技术文章 > MySQL对中文进行排序

MySQL对中文进行排序的实例

  • 发布时间:
  • 作者:码农之家原创
  • 点击:211

这篇文章主要知识点是关于MySQL、中文、排序、实例、MySQL按常规排序、自定义排序和按中文拼音字母排序的方法 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

PHP和MySQL Web开发
PHP和MySQL Web开发中文扫描第4版
  • 类型:PHP网站开发大小:51.6 MB格式:PDF出版:机械工业出版社作者:威利,汤姆森
立即下载

更多Mysql相关的学习资源可以参阅 Mysql电子书程序设计电子书 等栏目。

MySQL对中文进行排序

MySQL对中文进行排序详解

MySQL默认只支持对日期、时间和英文字符串进行排序,如果对中文进行order by很可能得不到想要的结果,如下面的查询并不会按我们所想的根据汉字的拼音进行排序:

SELECT * from user order by user_name;

如果相对中文进行排序的话,可以使用CONVERT(coloum_name USING GBK)将中文转为GBK编码形式,然后再排序,就可以实现根据汉子的拼音进行排序:

SELECT * from user order by CONVERT(user_name USING GBK);

 

MySQL按常规排序、自定义排序和按中文拼音字母排序的方法

MySQL常规排序、自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序。

下面给出3种比较常用的排序方式,mark一下

1.常规排序ASC DESC

ASC 正序

DESC倒叙

-- 此处不用多讲

2.自定义排序

自定义排序是根据自己想要的特定字符串(数字)顺序进行排序。

主要是使用函数 FIELD(str,str1,str2,str3,...)

MySQL的自定义排序,str与str1、str2、str3...进行比较,并按照str1,str2,str3...的顺序输出,如果遇到str为null或者不存在str1,str2,str3...中的情况的则序列为0,

eg:

SELECT * FROM TEST ORDER BY FIELD(value,'test1','test2','test3','test4') ASC/DESC

eg2:

SELECT * FROM TEST WHERE VALUE IN('test1','test2','test3','test4') ORDER BY FIELD(value,'test1','test2','test3','test4') ASC/DESC -- 保证只满足条件的进行排序

3.按中文拼音字母排序

如果表字段使用的GBK编码的话,我们可以直接order by value ,因为GBK本身就是按照拼音字母排序ABCDEFGHIGK...,当第一位相同的时候会比较第二位,以此类推。 如果表字段使用的UTF-8编码的话,通常我们都会的编码,这样我们可以使用MySQL的convert方法开转换gbk进行排序。

eg:

SELECT * FROM TEST ORDER BY CONVERT(value USING GBK) ASC/DESC

以上所述是小编给大家介绍的MySQL按常规排序、自定义排序和按中文拼音字母排序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!

以上就是本次给大家分享的关于Mysql的全部知识点内容总结,大家还可以在下方相关文章里找到在OneProxy的基础上实行My、 mysql查询当天、本周,本月、 MySql Date函数用法总结、 等mysql文章进一步学习,感谢大家的阅读和支持。

上一篇:mysql中的冗余和重复索引知识点

下一篇:mysql分页优化案例详解

展开 +

收起 -

学习笔记
网友NO.836001

Yii2实现跨mysql数据库关联查询排序功能代码

背景:在一个mysql服务器上(注意:两个数据库必须在同一个mysql服务器上)有两个数据库: memory (存储常规数据表) 中有一个 user 表(记录用户信息) memory_stat (存储统计数据表) 中有一个 user_stat (记录用户统计数据) 现在在 user 表生成的 GridView 列表中展示 user_stat 中的统计数据 只需要在User的model类中添加关联 public function getStat(){ return $this-hasOne(UserStat::className(), ['user_id' = 'id']);} 在GridView就可以这样使用来展示统计数据 ?= GridView::widget([ 'dataProvider' = $dataProvider, 'columns' = [ //其他列 [ 'label' = '统计数据', 'value' = function($model){ return isset($model-stat-data) ? $model-stat-data : null; } ], //其他列 ],]); ? 现在增加了一个需求,需要在user GridView 列表中对统计数据进行排序和筛选 若 user 和 user_stat 表在同一个数据库下我们可以这样做: UserSearch: public $data;public function rules(){/*{{{*/ return [ ['data'], 'integer'], //其他列 ];}/*}}}*/public function search($params, $onlyActiveUsers = false){ $query = User::find(); $query-joinWith(['stat']); $dataProvider = new ActiveDataProvider([ 'query' = $query, 'sort' = [ 'attributes' = [ //其他列 'data' = [ 'asc' = [UserStat::tableName() . '.data' = SORT_ASC], 'desc' = [UserStat::tableName() . '.data' = SORT_DESC], ], //其他列 ], 'defaultOrder' = [ 'id' = SORT_DESC, ], ], 'pagination' = [ 'pageSize' = 50, ], ]); $this-load($pa……

网友NO.793896

将MySQL查询结果按值排序的简要教程

MySQL查询结果如何排序呢?这是很多人都提过的问题,下面就教您如何对MySQL查询结果按某值排序,如果您感兴趣的话,不妨一看。 之前有一个功能修改,要求MySQL查询结果中: id name * * *1 lucy ...3 lucy ...2 lily ...4 lucy ... 名字为lucy的优先排在前面,百思不得其解,可能有人会说简单 union嘛 或者弄个临时表什么的,其实我也想过,但是本身SQL逻辑就很多了(上面只是简例),再union的话或者临时表可能绕很大的弯路,后来看到一篇文章尝试着加入order by find_in_set(name,'lucy') ,结果 得到的结果为lucy全部在下面,随即我改为order by find_in_set(name,'lucy') desc 实现结果为 id name * * *1 lucy ...3 lucy ...4 lucy ...2 lily ... 基本实现,可是又有点不确定的心情,查mysql文档发现find_in_set语法 FIND_IN_SET(str,strlist) 假如字符串str 在由N 子链组成的字符串列数据表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列数据表就是一个由一些被『,』符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(『,』)时将无法正常运行 mysql SELECT FIND_IN_SET('b……

网友NO.272485

MySQL按照汉字的拼音排序简单实例

如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了,但考虑到人名等都是常用汉字,因此只是针对一级汉字能正确排序也够用了)。 直接在查询语句后面 添加 order by name asc; 查询结果按照姓氏的升序排序; 如果存储姓名的字段采用的是utf8字符集,需要在排序的时候对字段进行转码;对于的代码是 order by convert(name using gbk) asc; 同样,查询的结果也是按照姓氏的升序排序; 以上这篇MySQL按照汉字的拼音排序简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

网友NO.331893

两种mysql对自增id重新从1排序的方法

最近老是要为现在这个项目初始化数据,搞的很头疼,而且数据库的Id自增越来越大,要让自增重新从1开始:那么就用下面的方法吧: 方法一: 如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数 truncate table 表名 方法二: dbcc checkident ('table_name', reseed, new_reseed_value) 当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息。 方法二不会清空已有数据,操作比较灵活,不仅可以将自增值归零,也适用于删除大量连续行后,重新设置自增值并插入新的数据;或从新的值开始,当然不能和已有的冲突。 $sql="delete from $table_vote"; mysql_query($sql, $link); $sql="alter table $table_vote auto_increment=1"; mysql_query($sql, $link); 以上就是本文的全部内容,希望这两种方法对大家的学习有所帮助。 ……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明