mysql中文排序

MySQL中文排序简析及Go语言简单实现 本文简单地举例说明了下网上常见的几种对中文排序的方案及其存在的问题,简单解析了MySQL对中文排序的逻辑,并针对这些问题提出了一种新的方案,实现了接近MySQL对中文排序的展示逻辑 阅读详情

之所以写这篇博客,是因为前几天才碰到了这么一个问题,以前还不知道mysql有这么一个问题。
数据库使用的是mysql,字符集统一为utf-8。
本来已经完成了,但是系统使用的时候,发现查出来的人名没有顺序,本来以为很简单,在查询的时候,指定按照name排序就可以了,岂知实际一做才发现问题:mysql数据库使用字符集为utf-8,查询出来的中文根本不是按照拼音排序的。

我的解决方案大致是:
①       在sql语句中做手脚,在查询的时候排序。
②       如果不行查询出来,在程序中,自己写个方法排序。
③       最差的解决办法就是修改name字段,字符集使用gbk(或gb2312)
显然,第一种方法是最高效的,第三中方法是最差劲的。

不能直接在程序中改,先做几个试验:

试验一:mysql中文排序

准备工作:
在mysql中建立一个数据库,就使用test吧,建两个表test1和test2,均设置两个字段,id和name,要求是test1.name这个字段使用的字符集为UTF-8,test2.name这个字段使用的字符集为GBK,输入几条数据,记得要输入中文啊。
建表语句:
(1)test1:
CREATE TABLE `test1` (                                 
          `id` int(4) unsigned NOT NULL auto_increment,       
          `name` varchar(20) character set utf8 default NULL,
          PRIMARY KEY (`id`)                                 
        ) ;
(2)test2:
CREATE TABLE `test2` (                                 
          `id` int(4) unsigned NOT NULL auto_increment,       
          `name` varchar(20) character set gbk default NULL,
          PRIMARY KEY (`id`)                                 
        ) ;
另外修改表中字段的字符集可以使用:alter table `test1` change `name` `name` varchar (20) CHARACTER SET utf-8   NULL;
输入数据:

(缅怀一下伟人!!!呵呵。)
test2表中也一样。

进行试验:
直接使用sql语句查询:分别对test1和test2表进行如下查询:
select name from test1 order by name;
结果:

很明显,test1表中的数据没有按照中文拼音排序,而使用了gbk字符集的test2查询结果令人很满意。

问题:
在一个j2ee项目中,字符编码是一个很令人头痛的问题,为了和国际接轨,适应多语种,大部分项目都采用了UTF-8字符集,但是mysql中对采用UTF-8的存储中文的字段查询,却不尽如人意。

问题的解决之道:
在网上查了许久,也没有一个能够解决这个问题的方法。
这篇文章http://blog.donews.com/jenniferweng/archive/2006/08/07/991039.aspx可以称作集大成者,我也是从这里面找到的方法。
我构造的sql语句是:select name from test1 order by convert(name using gb2312) asc;
在mysql中试了一下,结果很令人满意。
结论是:查询的时候,通过convert函数,把查询出来的数据使用的字符集gb2312编码就可以了,然后使用convert之后的中文排序。但是如果真的去把表中字段的字符集改成gb2312,又会涉及到很多编码的问题,页面传值啊,从数据库中存取啊,很麻烦。只要在查询的时候,指定一下字符集,并不是真的把物理字段改成gb2312,很简单。

我马上把这个方法告诉老大,准备静候佳音了。谁知问题随之又来了,convert函数在hibernate中不认。大概是因为convert这个函数是mysql自己提供的一个方法。这怎么办?
我的第一反应就是使用第二个方案,查出来,自己排序。

MySQL中文按字母顺序排序 默认情况下,MySQL使用的是基于字符集的排序规则,这对于英文字符是有效的,但对于中文字符来说,会按照字符的编码顺序进行排序,而不是按照汉字的拼音或笔画顺序排序。在创建数据库或表时,可以指定使用一种支持中文排序的字符集,比如utf8mb4_unicode_ci或utf8mb4_general_ci。在上面的查询中,我们使用了gbk字符集将姓名转换为拼音,并使用gbk_chinese_ci排序规则进行排序。需要注意的是,使用COLLATE子句只会影响到当前查询的排序规则,并不会修改表中数据的实际排序方式。 阅读详情

相关推荐

告别效率低谷:用ADS仿真手把手教你设计高回退Doherty功放(附1:2非对称案例)

本文详细解析了如何使用ADS仿真设计高回退Doherty功放,特别针对1:2非对称架构进行深入探讨。通过优化功率分配比、峰值管开启阈值等关键参数,显著提升功放在9dB回退点的效率至75%以上,适用于LTE等高PAPR信号场景。文章还提供了ADS仿真环境搭建、参数优化及工程化设计的实用技巧。

weixin_33743248的博客 453

关于 MySQL 中文排序问题

MySQL 中文排序

m0_48805880的博客 1017

Vision-Language Navigation - Windows环境下编译安装Matterport3D Simulator仿真器(三)

目录1 编译 Matterport3D Simulator 源码1.1 源码下载1.2 编译 1 编译 Matterport3D Simulator 源码   在 Windows 下编译 Matterport3D Simulator 稍微有些不方便,需要对 CMakeLists.txt 进行一些修改,如果有更好的方法欢迎大家评论。 1.1 源码下载   还是直接在 Github 上搜索 Matterport3D Simulator 的 repo,下载源码。如果用 zip 方式,那么直接在下即可。如果使用

weixin_44110393的博客 4845

MySQL支持中文排序的实现方法

如果你需要更精细地控制排序行为,MySQL允许你针对特定列设置自定义排序规则。在MySQL中支持中文排序,你可以根据具体需求选择GBK或UTF-8字符集,并通过设置合适的排序规则来确保中文数据的正确排序。如果你需要更精细的控制,可以针对特定列设置自定义排序规则。正确设置字符集和排序规则对于处理多语言数据至关重要,它直接影响到数据的一致性和用户体验。

sheji888的专栏 2613

告别色差!用Python+TCS34725颜色传感器实现精准色彩还原(附完整校准代码)

本文详细介绍了如何利用Python和TCS34725颜色传感器实现专业级色彩还原方案。通过双阶校准法(白光校准和黑电平校准)和进阶的光照自适应技术,解决传感器原始数据不准的问题,并提供完整的校准代码和实战案例,帮助开发者实现ΔE<3的高精度色彩识别。

weixin_30836759的博客 209

STM32G474的HRTIM实战:用CubeMX配置互补PWM驱动全桥电路(附移相算法代码)

本文详细介绍了如何使用STM32G474的HRTIM高分辨率定时器,通过CubeMX配置互补PWM驱动全桥电路,并附移相算法代码。内容涵盖HRTIM硬件架构解析、CubeMX配置全流程、移相控制算法实现及调试技巧,为数字电源和电机控制领域提供实用解决方案。

weixin_27017211的博客 481

MySQL根据中文汉字排序查询

这个时候可以发现数据是正确按照中文首字母进行排序的,是因为ORDER BY后面使用了CONVERT函数转换类型指定了gbk字符集,才能按照中文首字母正确排序。指定 people_name 列数据正序排序,可以明显看出姓名的排序错误,测**和蔡**应该排在第一位置才对,结果第一条数据是李**;在MySQL中当说到进行排序查询时,大家的第一反应就是使用。方法指定列进行排序,但是如果要指定列为中文数据按照首字母排序时,就会发现。我们先来测试下正常使用。方法排序的顺序其实是有问题的。

weixin_45151960的博客 1364

别再乱调NvM_WriteBlock了!手把手教你搞懂Autosar NVM状态机与读写时序

本文深入解析Autosar NVM状态机与读写时序,帮助开发者避免常见错误。通过详细的状态机解读、最佳实践代码示例和异常处理策略,提升嵌入式系统中数据存储的可靠性。特别针对NvM_WriteBlock的调用逻辑和状态机机制进行实战讲解,解决工程师在实际开发中遇到的异步写入问题。

weixin_33701617的博客 344

MySQL中给中文进行排序

在我们做项目中难免会遇到给数据排序的情况,一般对数字直接排序的就不说了,今天说下做项目过程遇到的,对中文进行排序时需要注意的: 需要在排序的时候对字段进行转码;对应的代码是  order by convert(name using gbk) asc; 因为一般排序的默认为升序这里asc可以省略不写,那么,知道了升序就自然知道降序了,将后面的asc换成desc即可。这里以我的代码举例一下(我这里是

congbaobei的博客 653

Excel 汉字首字母提取:四种方案对比与选型

本文对比了 Excel 中提取汉字首字母的四种方案:手动转换、VBA 脚本、映射表与 AI 工具。手动方式低效易错;VBA 适合无网环境但识别范围有限;映射表精度提升却无法解决多音字;AI 工具通过语义理解可一句话完成提取,是多数场景下的首选。

u011186532的专栏 395

piamon实战-- 如何使用 Paimon 的 Java API 实现数据的点查

点查(Point Lookup)是指通过 ​​唯一键(Primary Key)​​ 快速定位并返回单条或少量数据的查询模式。例如:根据用户 ID 查询用户信息、根据订单号查询订单详情等。点查的核心诉求是 ​​低延迟​​ 和 ​​高吞吐​​,适用于实时风控、在线分析等场景。​​定义主键表结构​​,优化数据分布。​​构建过滤条件​​,使用指定查询键。​​执行查询并处理结果​​,结合流式更新实现实时查询。

阿华田的博客 530

utf-8 中文mysql排序_mysql utf8 中文字符 排序

乘着放假,帮老大做个系统以减轻他的工作强度。用什么做,当然是ruby on rails+mysql啦。又是一番安装、配置。然后开始写代码。很多人遇到的中文问题,我在上一次做练习的时候已经遇到并解决了。当时发现,当浏览器使用简体中文gb2312时,ruby代码中的中文没有问题,但是从数据库中的中文是乱码。换成utf8,则相反,mysql中的中文正常,ruby中的代码有问题。当时,相关配置都没有做特别...

weixin_35225189的博客 1227

在 SAP BTP 上为应用开启多租户能力:基于 SaaS Provisioning 和 XSUAA 的完整实践指南

本文介绍了在SAP BTP上配置多租户应用的实战指南。主要内容包括: 多租户架构概述:解释provider子账户、consumer子账户和tenant的概念,以及数据隔离机制。 安全配置:在xs-security.json中设置tenant-mode为shared,并为SaaS Provisioning服务添加回调scope授权。 路由配置:通过manifest.yml设置TENANT_HOST_PATTERN来定义多租户访问模式,确保不同租户通过不同子域名访问同一应用。 服务绑定:将XSUAA和SaaS

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 145

mysql 对中文排序_【MySQL】MySQL按中文排序

1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的。 这种情况在MySQL的很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。 出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现...

weixin_32223625的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

mysql数据库 排序中文字段_MySQL对中文进行排序的实例

MySQL对中文进行排序MySQL对中文进行排序详解MySQL默认只支持对日期、时间和英文字符串进行排序,如果对中文进行order by很可能得不到想要的结果,如下面的查询并不会按我们所想的根据汉字的拼音进行排序:SELECT * from user order by user_name;如果相对中文进行排序的话,可以使用CONVERT(coloum_name USING GBK)将中文转为GBK...

weixin_36322704的博客 3999

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MySQL按中文排序

今天在工作中遇到MySQL按照中文进行排序的问题,平时也有按照中文进行排序,但是没有具体研究过,这次进行一些总结,方便以后查阅。 在处理使用Mysql时,数据表采用utf8字符集,使用中发现中文不能直接按照拼音排序   如果数据表tbl的某字段name的字符编码是latin1_swedish_ci select * from `tbl` order

菜鸟笔记 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【MySQL】MySQL按中文排序

1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的。 这种情况在MySQL的很多版本中都存在。 如果这个问题不解决,那么MySQL将无法实际处理中文。 出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这...

ME__WE的博客 696

mysql 默认的中文排序_如何让mysql支持中文排序

让MySQL支持中文排序我们知道,编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象,一种解决方法是对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。编译MySQL时使用--with--charset=gbk 参数,这样MySQL就会直接...

weixin_32804237的博客 667

mysql中文排序_【中文排序】mysql order by 中文排序

1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的。 这种情况在MySQL的很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。 出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现...

weixin_36064512的博客 175

MySQL中支持中文排序的实现方法

MySQL允许自定义排序规则,通过创建自定义排序规则,可以实现更精确的中文排序。

My_wife_QBL的博客 3213

mysql order by 中文排序

1.在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的。 这种情况在MySQL的很多版本中都存在。 如果这个问题不解决,那么MySQL将无法实际处理中文。 出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现...

huangbaokang的博客 6137

php mysql 中文排序_PHP/MYSQL UTF8 中文排序

1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用asort排序不行。用gbk和gb2312可以。这跟几种格式的编码有关系。gbk和gb2312本身的编码就是用拼音排序的。function utf8_array_asort(&$array){if(!isset($array) || !is_array($array)){return false;}foreach($...

weixin_36219012的博客 210

MySQL排序(根据中文首字母排序)

1.常规排序ASC DESC ASC 正序 DESC倒叙 – 此处不用多讲 2.自定义排序 自定义排序是根据自己想要的特定字符串(数字)顺序进行排序。主要是使用函数 FIELD(str,str1,str2,str3,…) MySQL的自定义排序,str与str1、str2、str3…进行比较,并按照str1,str2,str3…的顺序输出,如果遇到str为null或者不存在str1,str2,st...

qq_41988504的博客 1万+

mysql8中文排序_mysql中utf8编码的中文字段按拼音排序

http://blog.s777n.net/orderbychinesefieldutf8/comment-page-2/2010-08-24 17:36 by TomorrowMan | 分类: 技术, 数据库如果在mysql中使用字符集为utf8,想要对中文字段用order by chinese_field 排序,那么出来的顺序并不是按照拼音排序的,不是我们想要的结果。解决方法:1、改变...

weixin_35625739的博客 1067

【MySQL】MySQL中文排序失效解决方法

在mysql中,如果直接order by中文字段,排序结果并非按照自然排序进行,而是根据字符对应的ASCII码排序。所以为了实现按照中文拼音排序,最简单的做法,是在sql语句中加入convert函数。前提得保证 mysql已经引入了gbk字符集,不然会报错哦!

杰叔叔不是个好叔叔的博客 571
上一篇: 在utf8下php处理url传送数据的的乱码问题
下一篇: 使用onclick跳转到其他页面。使用button跳转到指定url
cqinter
博客等级 码龄21年 14粉丝 62原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值