使用MySQL 5.6,给出以下表结构:
mysql> describe groups;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(500) | YES | | NULL | |
| description | varchar(200) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
以下数据在
中`groups` table:
mysql> select id, name from groups;
+----+------------------+
| id | name |
+----+------------------+
| 1 | some-users |
| 2 | SOME-ADMINS |
| 3 | customers-group1 |
| 4 | customers-group2 |
| 5 | customers-group3 |
+----+------------------+
5 rows in set (0.00 sec)
以下查询在MySQL中排序很糟糕(而在至少PostgreSQL,Oracle和MSSQL中它可以正常工作):
mysql> select id, name from groups order by upper(name);
+----+------------------+
| id | name |
+----+------------------+
| 3 | customers-group1 |
| 4 | customers-group2 |
| 5 | customers-group3 |
| 1 | some-users |
| 2 | SOME-ADMINS |
+----+------------------+
5 rows in set (0.00 sec)
我希望:
SOME-ADMINS
出现在some-users
之前,与其他数据库供应商的情况一样。
这是MySQL的错误吗?
答案 0 :(得分:4)
根据文档,它不区分大小写,但您可以使用BINARY使其区分大小写:
在字符类型列上,排序与所有其他比较操作一样,通常以不区分大小写的方式执行。这意味着除了它们的情况之外,对于相同的列,订单是未定义的。您可以使用BINARY强制对列进行区分大小写的排序,如下所示:ORDER BY BINARY col_name。