mysql collate

今天在看建表的sql語句時,突然看到如果字段爲varchar類型時,會設置一下CHARACTER SET utf8 COLLATE utf8_bin,後來看了一下網上的貼子,設置collate的主要作用是設置對自符的較難規則。 舉個例子吧: 按下面的sql語句去搜索 select to_id from test where to_id='cn象_王';

出現的結果會搜索出兩條來 +---------------+ | to_id | +---------------+ | cn陶_陶 | | cn象_王 | +---------------+ 爲什麼?“cn陶_陶”與“cn象_王”編碼後的字符都不一樣,但是爲什麼mysql會認爲這兩條記錄是一樣的呢? 如果把COLLATE **_bin都改成一樣的,那結果就對了。 這裏先解釋一下mysql collation的命名規則: 它們以其相關的字符集名開始,通常包括一個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束 原來MySQL按照下面的方式選擇表字符集和校對規則: 如果指定了CHARACTER SET X和COLLATE Y,那麼採用CHARACTER SET X和COLLATE Y。 如果指定了CHARACTER SET X而沒有指定COLLATE Y,那麼採用CHARACTER SET X和CHARACTER SET X的默認校對規則。 否則,採用服務器字符集和服務器校對規則。 下面總結一下一般的建表的sql語句吧:   CREATE TABLE `product` ( `SITE` varchar(32) NOT NULL, `id` bigint(20) NOT NULL, `gmt_create` datetime NOT NULL DEFAULT '1999-09-09 00:00:00','創建時間'  //時間的設置 `gmt_modified` datetime NOT NULL DEFAULT '1999-09-09 00:00:00','修改時間' `PROVINCE` varchar(128)CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,'省'  //如果是字符則要這樣設 PRIMARY KEY (`id`), //設置主鍵 KEY `idx_offer_mid_st_ge_gid_tp` (`member_id`,`STATUS`,`GMT_EXPIRE`,`group_id`,`TYPE`), //設置索引 KEY `idx_test` (`member_id`,`GMT_EXPIRE`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 原文鏈接:http://hi.baidu.com/linda_lij/item/b653f1aedc67f7ac28ce9deb  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章