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  

posted @ 2012-08-08 23:57  茗迹周  阅读(2500)  评论(0编辑  收藏  举报