当编程java或者php遇到排序时,用mysql来解决可能更方便

本文介绍了在PHP中处理UTF-8编码的中文数组排序问题,以及在MySQL中如何正确进行中文排序,包括使用`iconv`函数、添加`binary`属性、调整字符集设置和使用`CONVERT`函数的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对比java排序时,用Mysql一条语句更简单,换一种方式,可能更方便。

Collections.sort(defaultMans, new Comparator<MonitorManufact>() {
			@Override
			public int compare(MonitorManufact o1, MonitorManufact o2) {
				char c1 = (o1.getCaption()).charAt(0);
				char c2 = (o2.getCaption()).charAt(0);
				return concatPinyinStringArray(
						PinyinHelper.toHanyuPinyinStringArray(c1)).compareTo(
						concatPinyinStringArray(PinyinHelper
								.toHanyuPinyinStringArray(c2)));
			}

			private String concatPinyinStringArray(String[] pinyinArray) {
				StringBuffer pinyinSbf = new StringBuffer();
				if ((pinyinArray != null) && (pinyinArray.length > 0)) {
					for (int i = 0; i < pinyinArray.length; i++) {
						pinyinSbf.append(pinyinArray[i]);
					}
				}
				return pinyinSbf.toString();
			}
		});

这篇文章主要向大家介绍PHP/MYSQL UTF8 中文排序,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

  1. 须要在php数组中用中文排序,可是通常使用utf8格式的文件,直接用asort排序不行。用gbk和gb2312能够。这跟几种格式的编码有关系。gbk和gb2312自己的编码就是用拼音排序的。

function utf8_array_asort(&KaTeX parse error: Expected '}', got 'EOF' at end of input: …y) { if(!isset(array) || !is_array( a r r a y ) ) r e t u r n f a l s e ; f o r e a c h ( array)) { return false; } foreach( array))returnfalse;foreach(array as k = > k=> k=>v)
{
a r r a y [ array[ array[k] = iconv(‘UTF-8’, ‘GBK//IGNORE’,KaTeX parse error: Expected 'EOF', got '}' at position 5: v); }̲ asort(array);
foreach($array as k = > k=> k=>v)
{
a r r a y [ array[ array[k] = iconv(‘GBK’, ‘UTF-8//IGNORE’, $v);
}
return true;
}

  1. 在MySQL中,咱们常常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果每每都是错误的。 这种状况在MySQL的不少版本中都存在。
    若是这个问题不解决,那么MySQL将没法实际处理中文。 出现这个问题的缘由是由于MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时通常以ISO-8859字符集做为默认的字符集,所以在比较过程当中中文编码字符大小写转换形成了这种现象。
    解决方法:
    对于包含中文的字段加上"binary"属性,使之做为二进制比较,例如将"name char(10)“改为"name char(10)binary”。
    若是你使用源码编译MySQL,能够编译MySQL时使用 --with–charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了(默认的是latin1)。也能够用 extra-charsets=gb2312,gbk 来加入多个字符集。
    若是不想对表结构进行修改或者从新编译MySQL,也能够在查询语句的 order by 部分使用 CONVERT 函数。好比

select * from mytable order by CONVERT(chineseColumnName USING gbk);

当编程java或者php遇到排序时,用mysql来解决可能更方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值