當程式設計java或者php遇到排序時,用mysql來解決可能更方便

zhaozhangxiao發表於2021-07-21

對比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(&$array)
{
if(!isset($array) || !is_array($array))
{
return false;
}
foreach($array as $k=>$v)
{
$array[$k] = iconv(‘UTF-8’, ‘GBK//IGNORE’,$v);
}
asort($array);
foreach($array as $k=>$v)
{
$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來解決可能更方便

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章