我是mysql (和一般的sql )的新手,我正在尝试是否可以使插入到表中的列中的数据不区分大小写。
我正在存储州名称、城市名称等数据,所以我希望对这些类型的数据有一个唯一的约束,最重要的是使它们不区分大小写,这样我就可以依赖唯一性约束。
mysql是否支持在创建表期间或在列上设置唯一性约束时对列使用不区分大小写的选项?处理这些问题的通常方式是什么?我非常感谢任何替代的想法/建议来处理这个问题。
EDIT:按照建议,COLLATE我认为只适用于对插入的数据的查询。但是为了真正利用唯一性约束,我希望在INSERT上有一个不区分大小写的限制。例如,我希望mysql不允许插入California和california以及cALifornia,因为它们应该是相同的。但是如果我正确地理解了唯一性约束,那么在StateName上使用它仍然可以实现上述四种插入。
发布于 2014-01-02 11:51:14
默认情况下,MySQL不区分大小写。
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)发布于 2014-01-02 10:45:38
可以使用COLLATE运算符:http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
https://stackoverflow.com/questions/20875543
复制相似问题