我可以使mysql表列不区分大小写吗?

时间:2014-01-02 02:42:09

标签: mysql

我是mysql(以及一般的sql)的新手,我正在尝试查看是否可以将数据插入到表不区分大小写的列中。

我正在存储状态名称,城市名称等数据。所以我希望对这些类型的数据有一个独特的约束,最重要的是使它们不区分大小写,这样我就可以依赖于唯一性约束。

在表创建期间,或者在列上设置唯一性约束时,mysql是否在列上支持不区分大小写的选项?处理此类问题的常用方法是什么?如果您有任何其他想法/建议,我将不胜感激。

编辑:正如所建议的那样,COLLATE我认为只适用于插入数据的查询。但是为了真正利用唯一性约束,我希望对INSERT有一个不区分大小写的限制。对于例如我希望mysql不允许插入加利福尼亚州和加利福尼亚州以及加利福尼亚州,因为它们应该是相同的。但是如果我理解了唯一性约束,那么在StateName上使用它仍然会允许以上四个插入。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)