MySQL按照中文拼音排序問題的處理

MySQL按照中文拼音排序問題的處理

背景

項目開發中免不了數據的排序問題,排序中又免不了對中文的處理。今天分享一下如何在mysql中對中文進行排序。

正事兒

現有mysql數據表一個,默認的數據是這個樣子的(省略了其它字段):

MySQL按照中文拼音排序問題的處理

MySQL按照中文拼音排序問題的處理

數據查詢的時候不管是按添加時間還是按修改時間排序,領導都不滿意,領導說:應該按照名字排序嘛,這樣用戶就可以預見他想要的數據在什麼地方了。我說好,那就改吧。

MySQL按照中文拼音排序問題的處理

發現還不是想要的效果,這也不能怪mysql,畢竟中文博大精深,而我們的目標實際是中文的拼音排序,默認情況下mysql是不認識的(雖然我的數據庫所有編碼都已經設置為了utf-8)。

用'強大'的百度查了下,mysql要想實現中文拼音排序有兩種常用的辦法:

第一種

不修改表結構,只修改查詢語句:

明確的告訴mysql我這個字段要以gbk編碼處理(用gb2312也可以的)

MySQL按照中文拼音排序問題的處理

第二種

修改表結構不修改查詢語句:

重點在紅框位置,告訴mysql這個字段按照gbk編碼處理(也可以是gb2312_chinese_ci)

MySQL按照中文拼音排序問題的處理

MySQL按照中文拼音排序問題的處理

效果和第一種方法一樣

還有一種我沒有驗證的方法,網友提供的,大家可以參考下:

如果你使用源碼編譯MySQL,可以編譯MySQL時使用 –with–charset=gbk 參數,這樣MySQL就會直接支持中文查找和排序了(默認的是latin1)。也可以用 extra-charsets=gb2312,gbk 來加入多個字符集。

其實看到這裡大家都已經明白了,說來說去還是編碼的問題在作怪。只要是做開發的,肯定少不了遇到編碼的問題,都被編碼坑過。特別是數據庫,編碼問題更重要,上線之前編碼如果處理不好,後續可能造成致命的傷。

補充一個我收集的處理mysql編碼的資料。

通過 show variables like '%character_set%' 查看已有編碼:

MySQL按照中文拼音排序問題的處理

修改mysql的編碼方式可以有以下幾個:

1.通過配置文件修改my.ini(windows下)或/etc/my.cnf(linux下)

分別添加如下內容

[mysqld]

character_server_set=utf8

[mysql]

default-character-set=utf8

[mysql.server]

default-character-set=utf8

[mysql_safe]

default-character-set=utf8

[client]

default-character-set=utf8

2.創建數據庫時設置編碼

create database test character set utf8;

3.創建表時設置編碼

create table test(id int primary key)DEFAULT charset=utf8;

4.修改數據庫編碼

alter database test character set utf8;

5.修改表默認編碼

alter table test character set utf8;

6.修改字段編碼

alter table test modify col_name varchar(50) CHARACTER SET utf8;

好了,今天就分享到這裡。


分享到:


相關文章: