一天有开发同学问我,说,我们表里的数据怎么都不区分大小写的。能不能把他们区分开来。
我猜想他说的应该就是校对规则相关的事情。
与之确认后是这么一回事:
root@127.0.0.1 : test 23:36:25> drop table if exists `t1`;
Query OK, 0 rows affected (0.00 sec)
root@127.0.0.1 : test 23:36:25> CREATE TABLE `t1` (
-> `name` varchar(10)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.03 sec)
root@127.0.0.1 : test 23:36:25> insert into t1 values ('A1'),('a1');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
root@127.0.0.1 : test 23:36:25> select * from t1 ;
+------+
| name |
+------+
| A1 |
| a1 |
+------+
2 rows in set (0.00 sec)
root@127.0.0.1 : test 23:36:26> select * from t1 where name='a1';
+------+
| name |
+------+
| A1 |
| a1 |
+------+
2 rows in set (0.00 sec)
OK,大家看到,name='a1',却找出了关于'A1',这就是没有区分大小写。
在看下面的文章之前,有一些基本知识你也许需要确认:
(官方文档,关于字符集和校对规则, http://dev.mysql.com/doc/refman/5.1/zh/charset.html#charset-collate-precedence)
字符集与校对规则的关系:
. 字符集是用来定义MySQL存储字符串的方式,而校对规则则定义了比较字符串的方式;
. 每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci
. 校对规则命名约定:
以其相关的字符集名开始,通常包括一个语言名,
以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束.
. 如果在创建表时没有设定字符集和校对,则默认采用数据库字符集和校对规则
. 如果在创建表时没有设定校对规则,则采用表字符集默认的校对规则
显示所有可用的字符集
mysql> SHOW CHARACTER SET LIKE 'latin%';
select * from information_schema.character_sets;
显示所有可用的字符校对规则
mysql> SHOW collation LIKE 'latin%';
select * from information_schema.collations;
alter table XXXXX convert to character set utf8 collate utf8_bin;
就可以转换了
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/703656/viewspace-1035617/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/703656/viewspace-1035617/