MySQL에서 공백이 다른 유사한 이름을 비교하는 방법
데이터베이스 작업을 하다 보면 두 열에 저장된 값이 실제로는 같은 이름인데도 앞뒤 공백(leading/trailing spaces) 때문에 다른 값으로 취급되는 경우가 자주 발생합니다. 예를 들어 ' John '과 'John'은 사람 눈에는 동일해 보이지만, MySQL에서 단순히 = 연산자로 비교하면 일치하지 않습니다.
이런 문제를 해결하려면 LTRIM() 함수와 RTRIM() 함수를 함께 사용하면 됩니다. LTRIM()은 문자열 왼쪽의 공백을 제거하고, RTRIM()은 오른쪽의 공백을 제거합니다. 두 함수를 조합하면 문자열 양쪽의 모든 공백을 제거한 뒤 정확하게 비교할 수 있습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable614 (EnterName varchar(100), ReennterName varchar(100));
Query OK, 0 rows affected (0.97 sec)
2. 데이터 삽입
INSERT 명령을 사용해 공백이 포함된 레코드와 그렇지 않은 레코드를 삽입합니다.
mysql> insert into DemoTable614 values(' John ','John');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable614 values('Carol ','Bob');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable614 values('David ','David');
Query OK, 1 row affected (0.23 sec)3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable614;
실행 결과는 다음과 같습니다.
+------------+--------------+
| EnterName | ReennterName |
+------------+--------------+
| John | John |
| Carol | Bob |
| David | David |
+------------+--------------+
3 rows in set (0.00 sec)
화면상으로는 ' John '과 'John'이 같아 보이지만, 실제로는 공백 문자가 포함되어 있어 값이 다릅니다.
4. 공백을 제거한 후 유사한 이름 조회하기
다음 쿼리는 LTRIM()과 RTRIM()을 적용해 양쪽 공백을 제거한 값을 기준으로 두 열을 비교합니다.
mysql> select *from DemoTable614 where LTRIM(RTRIM(EnterName)) = LTRIM(RTRIM(ReennterName));
실행 결과는 다음과 같습니다.
+------------+--------------+
| EnterName | ReennterName |
+------------+--------------+
| John | John |
| David | David |
+------------+--------------+
2 rows in set (0.00 sec)
결과 분석
' Carol '과 'Bob'은 공백을 제거해도 서로 다른 이름이므로 결과에서 제외되었고, 공백만 다르고 실제 이름이 같은 ' John '/'John'과 ' David '/'David' 두 행만 정상적으로 반환되었습니다.
추가 팁: TRIM() 함수 활용하기
MySQL에서는 LTRIM(RTRIM(...)) 대신 TRIM() 함수 하나로 문자열 양쪽의 공백을 한 번에 제거할 수도 있습니다.
mysql> select *from DemoTable614 where TRIM(EnterName) = TRIM(ReennterName);
두 방법 모두 동일한 결과를 반환하며, 코드 가독성 면에서는 TRIM()을 사용하는 것이 더 간결합니다. 또한 데이터 입력 단계부터 공백을 관리하고 싶다면, INSERT 시점에 TRIM()을 적용하거나 MySQL 8.0 이상에서는 생성 컬럼(generated column)과 인덱스를 활용해 검색 성능까지 최적화할 수 있습니다.