MySQL에서 varchar 유형을 정렬하는 방법
asc 업그레이드
desc 내림차순
MySQL에서 기본 순서는 숫자와 날짜 유형만 정렬하지만 varchar의 경우 문자형 정렬은 쓸모가 없을 것 같습니다. 이제 varchar 유형 정렬 문제를 해결하는 방법을 소개하겠습니다.
오늘 국내 전화번호 테이블을 정렬하다가 재미있는 문제를 발견했습니다. isdcode 필드를 작은 것부터 큰 것 순으로 정렬하고 싶어서 이렇게 썼습니다
SELECT * FROM gb_country_isdcode ORDER BY isdcode asc
결과는 다음과 같습니다. 따라하고 보니 제가 원하는 결과가 아니더군요. 그래서 검색하고 검색해본 결과 드디어 원인을 찾았습니다. 당연히 asc를 직접 사용하여 정렬할 수는 없습니다. int 형식으로 변환해야 정상적으로 정렬이 가능합니다. isdcode + 0이면 충분합니다
SELECT * FROM gb_country_isdcode ORDER BY (isdcode+0) asc
전화번호가 아니고 한자라면? 간단한 변환만 하면 한자를 정렬할 수 있습니다.
SELECT * FROM table_name ORDER BY CONVERT(column_name USING gbk);
결론은 쿼리할 때 변환 함수를 통해 문자셋 gb2312를 사용하여 쿼리한 데이터를 인코딩한 후 변환 후 중국어 정렬을 사용하면 된다는 것입니다. 그러나 실제로 테이블 필드의 문자 집합을 gb2312로 변경하면 페이지 값 전송 및 데이터베이스 액세스와 같은 많은 인코딩 문제가 발생하므로 매우 번거롭습니다. 쿼리할 때 문자 집합을 지정하는 한 실제 필드는 gb2312로 변경되지 않으며 매우 간단합니다.