天天看點

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、改變字元編碼為gbk。

mysql8中文排序_mysql中utf8編碼的中文字段按拼音排序

DD

2、不想改變編碼的話,可以用如下方法:

對中文字段使用gbk編碼排序:

SELECT * FROM table ORDER BY CONVERT( chinese_field USING gbk ) ;

當然這需要你安裝mysql時安裝了gbk字元集,不然會報錯:#1115 - Unknown character set: 'gbk'

試了好像有不對的

mysql> select * from ywang order by convert(tname using gbk);

+------+--------+

| id   | tname  |

+------+--------+

|    2 | 啊    |

|    2 | 啊    |

|    1 | 測試 |

|    1 | 測試 |

|    4 | 雲    |

|    4 | 雲    |

|    3 | 打    |

|    3 | 打    |

+------+--------+

8 rows in set (0.01 sec)

上面的原因是插入資料client段使用字元集問題

另一例:

mysql> select * from yy order by convert(tname using gbk);

+------+-------+

| id   | tname |

+------+-------+

|    2 | 啊    |

|    1 | 才    |

|    4 | 他    |

|    3 | 一    |

+------+-------+

4 rows in set (0.01 sec)

mysql> show create table yy;

+-------+--------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                             |

+-------+--------------------------------------------------------------------------------------------------------------------------+

| yy    | CREATE TABLE `yy` (

`id` int(11) DEFAULT NULL,

`tname` varchar(50) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

+-------+--------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql> select * from yy;

+------+-------+

| id   | tname |

+------+-------+

|    1 | 才    |

|    2 | 啊    |

|    3 | 一    |

|    4 | 他    |

+------+-------+

4 rows in set (0.00 sec)

***************************

對于改字元集的方法,加一個庫預設字元集gbk,建表,然後排序,得到的就是拍好的

************************************

一些相關語句

1、使用SHOWCHARACTERSET語句列出資料庫中可用的字元集:

mysql>SHOWCHARACTERSET;2、要想列出一個字元集的校對(Collation)規則,使用SHOW COLLATION語句。

例如,要想檢視latin1(“西歐ISO-8859-1”)字元集的校對規則,使用下面的語句查找那些名字以latin1開頭的校對規則:

mysql>SHOW COLLATIONLIKE'latin1%';3.檢視資料表的字元集

mysql>showcreatetablemytable;

這個指令也可以檢視建這個表的SQL語句。

******************************

有空還是要看一下字元集的問題