http://blog.s777n.net/orderbychinesefieldutf8/comment-page-2/
2010-08-24 17:36 by TomorrowMan | 分類: 技術, 資料庫
如果在mysql中使用字元集為utf8,想要對中文字段用order by chinese_field 排序,那麼出來的順序并不是按照拼音排序的,不是我們想要的結果。
解決方法:
1、改變字元編碼為gbk。
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語句。
******************************
有空還是要看一下字元集的問題