네, 트리거(TRIGGER)를 사용하면 충분히 가능합니다. 트리거를 만들어 두면 INSERT 시점에 값이 자동으로 소문자로 변환되어 저장됩니다. 아래에서 단계별로 살펴보겠습니다.
1. 테스트용 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentSubject text
);
Query OK, 0 rows affected (0.61 sec)2. 소문자 자동 변환 트리거 생성
다음으로, INSERT가 실행되기 전에 값을 소문자로 변환하는 BEFORE INSERT 트리거를 생성합니다.
mysql> CREATE TRIGGER lowerCaseOnInsertDemo BEFORE INSERT ON DemoTable FOR EACH ROW
SET NEW.StudentSubject = LOWER(NEW.StudentSubject);
Query OK, 0 rows affected (0.21 sec)트리거 내부의 LOWER() 함수가 새로 입력되는 값(NEW.StudentSubject)을 모두 소문자로 바꿔 저장합니다.
3. 데이터 삽입
이제 대소문자가 섞인 값을 넣어 보겠습니다.
mysql> insert into DemoTable values('MOngoDb');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('JaVA');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('MySqL');
Query OK, 1 row affected (0.15 sec)4. 결과 확인
SELECT 문으로 저장된 데이터를 조회해 보면,
mysql> select *from DemoTable;
모든 값이 자동으로 소문자로 변환되어 저장된 것을 확인할 수 있습니다.
+----------------+ | StudentSubject | +----------------+ | mongodb | | java | | mysql | +----------------+ 3 rows in set (0.00 sec)
추가 팁: UPDATE 시에도 적용하려면?
INSERT뿐 아니라 기존 데이터를 수정할 때도 소문자 변환을 유지하고 싶다면, 같은 방식으로 BEFORE UPDATE 트리거를 추가로 생성하면 됩니다.
mysql> CREATE TRIGGER lowerCaseOnUpdateDemo BEFORE UPDATE ON DemoTable FOR EACH ROW
SET NEW.StudentSubject = LOWER(NEW.StudentSubject);이렇게 하면 데이터가 어떤 경로로 입력·수정되더라도 항상 일관된 소문자 형식으로 관리할 수 있어, 검색 조건 통일이나 중복 데이터 방지 등에도 유용합니다.