해당 글은 MySQL에서 정렬을 할 때 대소문자를 구분하여 정렬하는 방법과 구분하지 않고 정렬하는 방법에 대해서 확인해 봅니다.
1) 문자열을 대소문자를 구분하지 않고 정렬
💡 일반적으로 ORDER BY ~ 문을 사용하는 것은 대소문자를 구분하지 않고 정렬을 하는 방법입니다.
💡 [예시]
- 동물 정보 테이블(ANIMAL_INS) 내에 NAME을 기준으로 대소문자를 구분하지 않고 정렬을 수행합니다.
SELECT t1.ANIMAL_ID, t1.NAME
FROM ANIMAL_INS t1
WHERE t1.NAME LIKE '%el%'
AND t1.ANIMAL_TYPE = 'Dog'
ORDER BY t1.NAME;
2) 문자열을 대소문자를 구분하여 정렬 방법
💡 대소문자를 구분하여 정렬하는 방법은 ‘이진 형태’로 비교하여 정렬을 하는 방법을 통해 대소문자를 정렬합니다.
SELECT t1.ANIMAL_ID, t1.NAME
FROM ANIMAL_INS t1
WHERE t1.NAME LIKE '%el%'
AND t1.ANIMAL_TYPE = 'Dog'
ORDER BY BINARY t1.NAME;
1. BINARY
💡 BINARY
- SQL에서 사용되는 정렬 옵션입니다. 이 옵션을 사용하면 문자열을 이진(binary) 형태로 비교하여 정렬할 수 있습니다. 일반적으로 문자열을 정렬할 때는 문자의 사전식 순서를 따르지만, BINARY를 사용하면 문자의 이진 표현을 기준으로 정렬됩니다.
- 이는 대소문자나 문자열의 다른 특성에 관계없이 정확한 이진 값을 기준으로 정렬하고자 할 때 유용합니다. - 예를 들어, "apple", "Banana", "cherry"라는 문자열을 BINARY를 적용하여 정렬하면 "Banana", "apple", "cherry" 순서로 정렬됩니다. 이는 대소문자를 구분하지 않고 정확한 문자열 값을 기준으로 정렬하기 때문에 발생하는 결과입니다.
💡 [ 더 알아보기 ] 💡PostgreSQL이나 Oracle에서도 동일한 기능을 수행하는 함수가 있는가?
- POSTGRE: BINARY 대신 COLLATE "C"를 사용하여 이진(binary) 정렬을 수행할 수 있습니다. - ORACLE: BINARY 대신 NLS_SORT=BINARY 세션 파라미터를 설정하여 이진(binary) 정렬을 수행할 수 있습니다.