色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql中的漢字排序

錢琪琛2年前11瀏覽0評論

MySQL中的漢字排序是一個比較復(fù)雜的問題。在默認(rèn)情況下,MySQL是按照ASCII碼順序?qū)h字進(jìn)行排序的。這種排序方式對于英文或者純數(shù)字來說是沒有任何問題的,但是對于包含中文字符的數(shù)據(jù)來說,可能會導(dǎo)致排序結(jié)果不太準(zhǔn)確。

例如,我們有一個包含中文字符的數(shù)據(jù)表:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
表中的數(shù)據(jù)如下:
INSERT INTO `users` (`id`, `name`) VALUES
(1, '張三'),
(2, '李四'),
(3, '王五'),
(4, '趙六'),
(5, '阿貍'),
(6, '張三豐');
當(dāng)我們執(zhí)行以下SQL語句:
SELECT * FROM `users` ORDER BY `name`;
得到的排序結(jié)果為:
1 張三
6 張三豐
5 阿貍
4 趙六
2 李四
3 王五
可以看到,這個排序結(jié)果不太準(zhǔn)確,因為按照我們的語言習(xí)慣,應(yīng)該是先按照姓氏排序,再按照名字排序。
那么怎么解決這個問題呢?我們可以使用MySQL提供的COLLATE關(guān)鍵字來指定排序規(guī)則。

COLLATE關(guān)鍵字用來指定字符集的排序方式。我們可以使用utf8mb4_unicode_ci字符集來對中文字符串進(jìn)行排序,它采用的是Unicode規(guī)則。

我們可以修改表定義,如下:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
當(dāng)我們執(zhí)行以下SQL語句:
SELECT * FROM `users` ORDER BY `name` COLLATE utf8mb4_unicode_ci;
得到的排序結(jié)果為:
5 阿貍
2 李四
3 王五
1 張三
6 張三豐
4 趙六
這個排序結(jié)果已經(jīng)正確了。

除了utf8mb4_unicode_ci外,還有一種常用的排序規(guī)則是utf8mb4_general_ci,它采用的是一種更加寬松的比較方式,會將一些字符看作是相等的,例如大小寫字母、重音符號等。但是對于中文排序來說,它可能會導(dǎo)致一些問題,因此一般不建議使用。