ITPub博客

首页 > 数据库 > 数据库开发技术 > 关于表的校对规则collation,不区分大小写

关于表的校对规则collation,不区分大小写

原创 数据库开发技术 作者:Steven1981 时间:2010-07-29 00:03:02 0 删除 编辑

一天有开发同学问我,说,我们表里的数据怎么都不区分大小写的。能不能把他们区分开来。

我猜想他说的应该就是校对规则相关的事情。
与之确认后是这么一回事:

[@more@]

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博客 ” ,链接:https://blog.itpub.net/703656/viewspace-1035617/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    127
  • 访问量
    855000