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

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

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

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

转载于:http://blog.itpub.net/703656/viewspace-1035617/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值