MySQL中文utf8排序问题解决方案 [ 2.0 版本 ]
网站开发接近尾声,几乎所有的编码都是采用utf8编码,但是最后在采用gridview显示人名,并排序的时候出现问题了。不是按照拼音或者笔画啊,乱七八糟的排序。也百度了应当采用gbk的方式才可以正确排序,也知道怎么加这个转换gbk的语句,但是在gridview点击行首排序咋个处理呢?
先谢谢啦。
非常感谢 @drodata 下面是我的解决方法。
参考网址:
- http://www.yiichina.com/question/1652
- http://blog.csdn.net/wqjsir/article/details/7544208
- http://blog.sina.com.cn/s/blog_3e585ce50102v133.html
考虑到一般编程代码以及MySQL存储都会采用UTF-8编码,但是遇到人名排序等问题时,发现不是按姓名也不是按笔画数目排序。
这跟UTF-8汉语字符的编码有关系,采用GBK编码,常用汉字一般都是按照汉语拼音顺序排列的。
下面假设在gridview里对名字等进行汉语拼音排序,是在对SearchModel进行操作。
假设有个数据库表tb_personinfo,使用Gii生成的两个ActiveRecord类,在./common/models/
文件夹下,有
Personinfo.php
和PersoninfoSearch.php
文件。修改PersoninfoSearch.php
文件。
代码如下。
class PersoninfoSearch extends Personinfo
{
public function search($params)
{
$query = Personinfo::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
// usage
$this->sortByPinyin($dataProvider, [
'name',
]);
// skip many codes.
}
/**
* sort params in attributes by Pinyin
* @params $params attribute name, as array
*/
public function sortByPinyin($dataProvider, $params)
{
$sorts = $dataProvider->getSort();
foreach($params as $param){
$sorts->attributes[$param] = [
'asc' => ["CONVERT($param USING gbk)" => SORT_ASC],
'desc' => ["CONVERT($param USING gbk)" => SORT_DESC],
];
}
$dataProvider->setSort($sorts);
}
}
解释:
- sortByPinyin($dataProvider, $params)函数,是这次添加的一个函数,$params是个数组array,
把需要通过汉语排序的属性名字作为元素罗列其中。 - search($params)是已有函数,本文只是对其添加下面这一条代码,用于汉语拼音排序。
$this->sortByPinyin($dataProvider, [
'name',
]);
bubifengyun NJSH
注册时间:2014-11-06
最后登录:2022-10-29
在线时长:59小时54分
最后登录:2022-10-29
在线时长:59小时54分
- 粉丝36
- 金钱10
- 威望160
- 积分2200
共 2 条评论
public function sortByPinyin($dataProvider, $params) { $sorts = $dataProvider->getSort(); foreach($params as $param){ $sorts->attributes[$param] = [ 'asc' => ["CONVERT($param USING gbk)" => SORT_ASC], 'desc' => ["CONVERT($param USING gbk)" => SORT_DESC], ]; } $dataProvider->setSort($sorts); }
你想表达啥意思?
function function_name() { echo 'hello world'; }