MySQL 대소문자 구별하여 정렬

MySQL order by case sensitive
MySQL 대소문자 구별하여 정렬

1 문제상황[ | ]

  • MySQL은 기본적으로 대소문자 구별 없이 정렬되는데, 구별하여 정렬하고 싶다.
mysql> SELECT * FROM plays ORDER BY name;
+----+---------+-------+------+
| id | name    | plays | wins |
+----+---------+-------+------+
|  2 | michael |     7 |    6 |
|  3 | Michael |     4 |    3 |
|  5 | michael |     2 |    1 |
|  1 | Wanda   |     9 |    8 |
+----+---------+-------+------+
4 rows in set (0.01 sec)
→ michael, Michael, michael 순으로 정렬되었다.

2 방법 1: BINARY[ | ]

  • 대문자가 모두 나온 후에 소문자가 나오게 됨
즉, 대문자와 소문자가 격리됨
mysql> SELECT * FROM plays ORDER BY BINARY name;
+----+---------+-------+------+
| id | name    | plays | wins |
+----+---------+-------+------+
|  3 | Michael |     4 |    3 |
|  1 | Wanda   |     9 |    8 |
|  2 | michael |     7 |    6 |
|  5 | michael |     2 |    1 |
+----+---------+-------+------+
4 rows in set (0.00 sec)
→ Wanda가 michael보다 먼저 나옴

3 방법 2: BINARY 추가[ | ]

  • 대소문자 구별없이 정렬한 후, BINARY에 의해 대소문자 정렬
대문자 우선
mysql> SELECT * FROM plays ORDER BY name, BINARY name;
+----+---------+-------+------+
| id | name    | plays | wins |
+----+---------+-------+------+
|  3 | Michael |     4 |    3 |
|  2 | michael |     7 |    6 |
|  5 | michael |     2 |    1 |
|  1 | Wanda   |     9 |    8 |
+----+---------+-------+------+
4 rows in set (0.00 sec)
소문자 우선 (DESC)
mysql> SELECT * FROM plays ORDER BY name, BINARY name DESC;
+----+---------+-------+------+
| id | name    | plays | wins |
+----+---------+-------+------+
|  2 | michael |     7 |    6 |
|  5 | michael |     2 |    1 |
|  3 | Michael |     4 |    3 |
|  1 | Wanda   |     9 |    8 |
+----+---------+-------+------+
4 rows in set (0.00 sec)

4 같이 보기[ | ]

5 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}