數(shù)據(jù)庫 - PostgreSQL、MySQL、Oracle,查詢的默認(rèn)排序是怎樣的?
問題描述
意思是指SELECT語句不加ORDER BY的情況下,是根據(jù)什么來排序的?多次查詢此排序是否會(huì)變化?謝謝。
問題解答
回答1:mysql沒有默認(rèn)排序,不指定排序的話多次查詢返回的數(shù)據(jù)順序是有可能不一樣的。http://stackoverflow.com/ques...
回答2:PG也是沒有默認(rèn)排序的, 不指定排序返回順序不可靠我是官方wiki
回答3:這篇文章介紹了 PG、MySQL、Oracle 的漢字排序,可能有一定參考作用: http://mp.weixin.qq.com/s?__b...
回答4:MySQL建庫和建表時(shí)都可以用COLLATE關(guān)鍵詞指定排序規(guī)則.比如WordPress:
數(shù)據(jù)庫:CREATE DATABASE IF NOT EXISTS `wordpress` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;評(píng)論表:CREATE TABLE IF NOT EXISTS `wp_comments` ( `comment_ID` bigint(20) unsigned NOT NULL, `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT ’0’, `comment_author` text COLLATE utf8mb4_unicode_ci NOT NULL, `comment_author_email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ’’, `comment_author_url` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ’’, `comment_author_IP` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ’’, `comment_date` datetime NOT NULL DEFAULT ’0000-00-00 00:00:00’, `comment_date_gmt` datetime NOT NULL DEFAULT ’0000-00-00 00:00:00’, `comment_content` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL, `comment_karma` int(11) NOT NULL DEFAULT ’0’, `comment_approved` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ’1’, `comment_agent` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ’’, `comment_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ’’, `comment_parent` bigint(20) unsigned NOT NULL DEFAULT ’0’, `user_id` bigint(20) unsigned NOT NULL DEFAULT ’0’) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
MySQL中排序規(guī)則utf8_general_ci不區(qū)分大小寫,ci為case insensitive的縮寫,即大小寫不敏感.比如,主鍵內(nèi)容為A,插入a將是不允許的,而查找a是可以查到A的.也就是說,A和a在字符判斷中被當(dāng)做一樣來處理.排序規(guī)則根據(jù)特定語言和區(qū)域設(shè)置的標(biāo)準(zhǔn)指定對(duì)字符串?dāng)?shù)據(jù)進(jìn)行排序和比較的規(guī)則.
排序規(guī)則的概念,以PHP的intl擴(kuò)展舉例:
<?phpheader(’Content-Type: text/html; charset=utf-8’);$arr = array(’中國’,’華山’,’華夏’,’中華’,’重陽’,’重量’,’b’,’a’,2,1);collator_sort(collator_create(’zh_CN’), $arr);var_export($arr);//輸出(可見漢字按照拼音排序,但不能識(shí)別多音字'重'):array ( 0 => ’a’, 1 => ’b’, 2 => ’華山’, 3 => ’華夏’, 4 => ’中國’, 5 => ’中華’, 6 => ’重量’, 7 => ’重陽’, 8 => 1, 9 => 2,)
