Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 BINARY 연산자로 정확한 문자열 검색하는 방법

MySQL에서 대소문자와 문자열을 완전히 일치시키며 검색하려면 BINARY 키워드를 사용할 수 있습니다. 기본적으로 MySQL의 문자열 비교는 콜레이션(collation) 설정에 따라 대소문자를 구분하지 않는 경우가 많은데, BINARY를 적용하면 바이트 단위로 비교하여 정확히 일치하는 값만 반환합니다.

기본 문법

SELECT * FROM yourTableName WHERE BINARY yourColumnName = yourStringValue;

예제 테이블 생성

문법을 이해하기 위해 먼저 예제 테이블을 생성해 보겠습니다.

mysql> create table ExactSearch
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> UserId varchar(10),
    -> UserName varchar(20),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.69 sec)

데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into ExactSearch(UserId,UserName) values('USER12','John');
Query OK, 1 row affected (0.11 sec)

mysql> insert into ExactSearch(UserId,UserName) values('12USER','Carol');
Query OK, 1 row affected (0.20 sec)

mysql> insert into ExactSearch(UserId,UserName) values('USER123','Bob');
Query OK, 1 row affected (0.15 sec)

mysql> insert into ExactSearch(UserId,UserName) values('USER231','Sam');
Query OK, 1 row affected (0.18 sec)

저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from ExactSearch;

실행 결과는 다음과 같습니다.

+----+---------+----------+
| Id | UserId  | UserName |
+----+---------+----------+
|  1 | USER12  | John     |
|  2 | 12USER  | Carol    |
|  3 | USER123 | Bob      |
|  4 | USER231 | Sam      |
+----+---------+----------+
4 rows in set (0.00 sec)

BINARY를 사용한 정확한 문자열 검색

이제 BINARY 키워드를 활용해 "USER123"이라는 문자열과 정확히 일치하는 레코드를 검색해 보겠습니다.

mysql> select *from ExactSearch where binary UserId = 'USER123';

실행 결과는 다음과 같습니다.

+----+---------+----------+
| Id | UserId  | UserName |
+----+---------+----------+
| 3  | USER123 | Bob      |
+----+---------+----------+
1 row in set (0.00 sec)

참고 사항

BINARY 연산자는 컬럼 값을 이진(binary) 문자열로 취급하여 비교하기 때문에, 대소문자가 다른 'user123'이나 부분적으로 일치하는 'USER12' 등의 값은 결과에 포함되지 않습니다. 다만 컬럼에 인덱스가 있더라도 BINARY를 적용하면 인덱스를 활용하지 못할 수 있으므로, 대용량 테이블에서는 성능에 유의해야 합니다. 대안으로, 테이블 생성 시 해당 컬럼의 콜레이션을 utf8mb4_bin처럼 대소문자를 구분하는 바이너리 콜레이션으로 지정하는 방법도 있습니다.