MySQL的UNIQUE KEY对数据中字母的大小写不敏感

今天遇到一个坑,对于下列这样一个表:

CREATE TABLE `test3` (
  `id` int(11) NOT NULL,
  `name` char(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

它的数据如下:

+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  2 | Aaa  |
+----+------+

现在我想在这个表上的name字段加一个唯一索引,发现无法创建:

root:test_4> alter table test3 add unique index uniq_name(name);
ERROR 1062 (23000): Duplicate entry ‘aaa‘ for key ‘uniq_name‘

发现UNIQUE KEY对字母的大小写不敏感,具体原因现在还没查到,查到解决方法如下:

root:test_4> alter table test3 add unique index uniq_name(name);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

也就是将name列的类型由varchar改为varchar binary类型,这样就可以解决了。

具体原因待后续查找。

时间: 2024-08-11 05:45:37

MySQL的UNIQUE KEY对数据中字母的大小写不敏感的相关文章

Python正则匹配字母大小写不敏感在读xml中的应用

需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: 1 if s == 'abc':#s为需要匹配的字符串 2 print '匹配成功\n' 现在的问题是s可能是Abc.ABC等等,所以需要大小写不敏感的匹配,如果把需要匹配的模式的大小写进行罗列,那即使是三个字母的短模式也是很麻烦,查了一下,正则表达式re模块中有个参数flags=re.I,这样就可以大小写不敏感的匹配了,示例如下: 1 import re

mysql 不区分大小写(大小写不敏感)

下边用一张表来区分mysql在windows和linux默认情况下对大小写的敏感程度 操作系统 表名 变量名 字段值 windows 不敏感 不敏感 不敏感 linux 敏感 敏感 敏感 linux下先不做介绍,因为没有实际用过,下边说下在windows下的修改方法: 表名区分大小写改法: lower_case_table_names = 0 其中 0:区分大小写,1:不区分大小写 字段值的改法: 1. 创建时设置: CREATE TABLE T( A VARCHAR(10) BINARY  )

mysql中key 、primary key 、unique key 与index区别

一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, user_name varchar(100) default NULL, operation_time datetime default NULL, logrecord_operation varchar(100) default NULL, PRIMARY KEY (logrecord_id), KEY wh

MySQL 中 key, primary key ,unique key,index的区别

一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, user_name varchar(100) default NULL, operation_time datetime default NULL, logrecord_operation varchar(100) default NULL, PRIMARY KEY (logrecord_id), KEY wh

[Z]mysql中key 、primary key 、unique key 与index区别

一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, user_name varchar(100) default NULL, operation_time datetime default NULL, logrecord_operation varchar(100) default NULL, PRIMARY KEY (logrecord_id), KEY wh

mysql通过sqoop导入到hbase中时数据量为1000w时出现Incorrect key file for table '/tmp/#sql_458_0.MYI'; try to repair it

问题:mysql通过sqoop导入到hbase中时数据量为1000w时出现Incorrect key file for table '/tmp/#sql_458_0.MYI'; try to repair it,数据量为100w等时没该问题 分析:出现该问题时因为mysql的临时目录(默认为/tmp)太小 解决方法:参考:http://blog.sina.com.cn/s/blog_4c197d420101bdn9.html mysql通过sqoop导入到hbase中时数据量为1000w时出现I

mySQL中删除unique key的语法 (删除某个字段的唯一性)

mySQL中删除unique key的语法 CREATE TABLE `good_booked` (  `auto_id` int(10) NOT NULL auto_increment,  `good_id` int(11) default NULL,  `chemist_id` int(11) default NULL,  PRIMARY KEY  (`auto_id`),  UNIQUE KEY `good_id` (`good_id`,`chemist_id`),  KEY `curre

MySQL表的创建和表中数据操作

这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑安装了mysql(my.ini下的字符集设置是utf8) 2,确保电脑同时安装navicat(任意版本) 3,保证mysql服务器已经启动 注:若对navicat操作不熟,请参照<<navicat从下载到使用>>这篇文章. ☆ 打开控制台 在navicat的tools(工具)菜单栏选择

[MySQL Tips]:如何删除unique key约束

[场景]: 假设最初创建了一个表bank,在street属性上添加了unique约束. create table branch( branch_name char(30) not null primary key, city varchar(20), street varchar(20) unique ); 表结构如下: [问题] 后来发现在同一个street上可以出现多个支行,也就是说street不应该是unique的.此时怎样删除unique约束呢? [方法] alter table bra