中文unicode 並無法依照筆畫正確排序,需轉為 big5 格式才行
網路一堆寫的 mysql 中文排序 並不正確
例如
mysql> SELECT pid,title FROM mydata ORDER BY convert(substr(title,1,4) using big5) ASC; 或 SELECT pid,title FROM mydata ORDER BY convert(title using big5) ASC; +-----+----------------+ | pid | title | +-----+----------------+ | 40 | 一樟 | | 28 | 十一 | | 138 | 士文 | | 112 | 小田 | | 33 | 三光 | | 118 | 大竹坑 | | 129 | 三地門 | | 38 | 大安森林公園 | | 169 | 上里 | | 73 | 大河 | | 56 | 上林 | +-----+---------------- 改用 gbk 也不行: mysql> SELECT pid,title FROM mydata ORDER BY convert(title using gbk) ASC; +-----+--------------------+ | pid | title | +-----+--------------------+ | 38 | 大安森林公園 | | 73 | 大河 | | 118 | 大竹坑 | | 129 | 三地門 | | 33 | 三光 | | 169 | 上里 | | 56 | 上林 | | 28 | 十一份 | | 138 | 士文 | | 112 | 小公田 | | 40 | 一樟 | +-----+--------------------+ mysql> show collation like 'big5%'; +-----------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +-----------------+---------+----+---------+----------+---------+ | big5_chinese_ci | big5 | 1 | Yes | Yes | 1 | | big5_bin | big5 | 84 | | Yes | 1 | +-----------------+---------+----+---------+----------+---------+
用 php 來排序的話
就是將 unicode中文字轉為 big5 格式
再以 big5文字來做排序
<?php $arrP = [ ['pid'=> 40, 'title'=>'一樟'], ['pid'=> 28, 'title'=>'十一'], ['pid'=>138, 'title'=>'士文'], ['pid'=>112, 'title'=>'小公田'], ['pid'=> 33, 'title'=>'三光'], ['pid'=>118, 'title'=>'大竹坑'], ['pid'=>129, 'title'=>'三地門'], ['pid'=> 38, 'title'=>'大安森林公園'], ['pid'=>169, 'title'=>'上里'], ['pid'=> 73, 'title'=>'大河'], ['pid'=> 56, 'title'=>'上林'], ]; #製作一個 big5 的中文資料 foreach($arrP as $key=>$data) { $title=$data['title']; $arrP[$key]['title_big5'] = iconv("UTF-8", "big5//TRANSLIT//IGNORE", $title); } #排序 $arrTmp = array_column($arrP, 'title_big5'); array_multisort($arrTmp , SORT_ASC, $arrP); var_dump($arrP); 排序結果: array(11) { [0]=> array(3) { ["pid"]=> int(40) ["title"]=> string(6) "一樟" ["title_big5"]=> string(4) "▒@▒▒" } [1]=> array(3) { ["pid"]=> int(28) ["title"]=> string(6) "十一" ["title_big5"]=> string(4) "▒Q▒@" } [2]=> array(3) { ["pid"]=> int(33) ["title"]=> string(6) "三光" ["title_big5"]=> string(4) "▒T▒▒" } [3]=> array(3) { ["pid"]=> int(129) ["title"]=> string(9) "三地門" ["title_big5"]=> string(6) "▒T▒a▒▒" } [4]=> array(3) { ["pid"]=> int(169) ["title"]=> string(6) "上里" ["title_big5"]=> string(4) "▒W▒▒" } [5]=> array(3) { ["pid"]=> int(56) ["title"]=> string(6) "上林" ["title_big5"]=> string(4) "▒W▒L" } [6]=> array(3) { ["pid"]=> int(138) ["title"]=> string(6) "士文" ["title_big5"]=> string(4) "▒h▒▒" } [7]=> array(3) { ["pid"]=> int(38) ["title"]=> string(18) "大安森林公園" ["title_big5"]=> string(12) "▒j▒w▒˪L▒▒▒▒" } [8]=> array(3) { ["pid"]=> int(118) ["title"]=> string(9) "大竹坑" ["title_big5"]=> string(6) "▒j▒˧|" } [9]=> array(3) { ["pid"]=> int(73) ["title"]=> string(6) "大河" ["title_big5"]=> string(4) "▒j▒e" } [10]=> array(3) { ["pid"]=> int(112) ["title"]=> string(6) "小田" ["title_big5"]=> string(4) "▒p▒▒" } }