mysql字段的值默认不区分大小写,如果有主键的表,主键列就不能插入重复的值(大小写不同)
实验
默认方式创建
CREATE TABLE `t1` (
`ID` varchar(40) CHARACTER SET utf8 NOT NULL,
`NAME` varchar(254) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`ID`,`NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
插入数据
insert into t1 values( 'Test','test');
再次插入数据
insert into t1 values( 'test','test');
提示错误
ERROR 1062 (23000): Duplicate entry 'test-test' for key 'PRIMARY'
修改字段类型
CREATE TABLE `t2` (
`ID` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`NAME` varchar(254) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`ID`,`NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
插入数据
insert into t2 values( 'Test','test');
再次插入数据
insert into t2 values( 'test','test');
查询数据
mysql> select * from t2;
+------+------+
| ID | NAME |
+------+------+
| Test | test |
| test | test |
+------+------+
变量名不区分大小写
mysql> set @var1 = 'Test';
Query OK, 0 rows affected (0.00 sec)
mysql> select *, @var1 from t2 where id=@Var1;
+------+------+-------+
| ID | NAME | @var1 |
+------+------+-------+
| Test | test | Test |
+------+------+-------+
1 row in set (0.00 sec)
结论
Linux下mysql默认:
- 区分 库名,表名,表名的别名 的大小写
- 不区分列名,列名的别名,变量名 的大小写
备注
配置/etc/my.cnf,支持不区分大小写
my.cnf 如下
[mysqld]
lower_case_table_names=1
重启MYSQL服务即可
lower_case_table_names = 0 默认区分大小写
0:区分大小写
1:不区分大小写
MySQL在Windows下都不区分大小写。
若需要区分字段值的大小写,则字段需要设置BINARY属性。
设置方法:
- 创建时设置:create table t3(id VARCHAR(10) BINARY);
- alter修改:alter table
t3
modify columnid
VARCHAR(45) BINARY;