我是mysql(以及一般的sql)的新手,我正在尝试查看是否可以将数据插入到表不区分大小写的列中。
我正在存储状态名称,城市名称等数据。所以我希望对这些类型的数据有一个独特的约束,最重要的是使它们不区分大小写,这样我就可以依赖于唯一性约束。
在表创建期间,或者在列上设置唯一性约束时,mysql是否在列上支持不区分大小写的选项?处理此类问题的常用方法是什么?如果您有任何其他想法/建议,我将不胜感激。
编辑:正如所建议的那样,COLLATE我认为只适用于插入数据的查询。但是为了真正利用唯一性约束,我希望对INSERT有一个不区分大小写的限制。对于例如我希望mysql不允许插入加利福尼亚州和加利福尼亚州以及加利福尼亚州,因为它们应该是相同的。但是如果我理解了唯一性约束,那么在StateName上使用它仍然会允许以上四个插入。
答案 0 :(得分:14)
CREATE TABLE test
(
name VARCHAR(20),
UNIQUE(name)
);
mysql> INSERT INTO test VALUES('California');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test VALUES('california');
ERROR 1062 (23000): Duplicate entry 'california' for key 'name'
mysql> INSERT INTO test VALUES('cAlifornia');
ERROR 1062 (23000): Duplicate entry 'cAlifornia' for key 'name'
mysql> INSERT INTO test VALUES('cALifornia');
ERROR 1062 (23000): Duplicate entry 'cALifornia' for key 'name'
mysql> SELECT * FROM test;
+------------+
| name |
+------------+
| California |
+------------+
1 row in set (0.00 sec)
BINARY
要在MySQL中区分大小写,BINARY
关键字的使用方法如下
mysql> CREATE TABLE test
-> (
-> name varchar(20) BINARY,
-> UNIQUE(name)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> INSERT INTO test VALUES('California');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT INTO test VALUES('california');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test VALUES('cAlifornia');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test VALUES('cALifornia');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> SELECT * FROM test;
+------------+
| name |
+------------+
| California |
| cALifornia |
| cAlifornia |
| california |
+------------+
4 rows in set (0.00 sec)
答案 1 :(得分:1)
您可以使用COLLATE
运算符:http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html