반응형
1. 문자열
MySQL에서는 쌍따옴표를 사용해 문자열 표기할 수 있지만 홑따옴표 사용이 표준이다.
SQL 표준에서는 문자열 값에 홑따옴표가 포함돼 있을 때 홑따옴표를 두 번 연속해서 입력하면 된다.
SELECT * FROM tbl WHERE dept_no='d''001'; >> d'001
SELECT * FROM tbl WHERE dept_no='d"001'; >> d"001
2. 숫자
숫자는 홑따옴표 없이 값을 입력하면 된다.
문자열 형태로 숫자를 사용하더라도 비교 대상이 숫자 타입의 컬럼이면 MySQL 서버는 문자열 값을 숫자 값으로 자동 형변환 후 비교를 한다.
아래 쿼리문 중 (1) 쿼리문은 '10001' 문자열이 숫자형으로 형변환되기에 성능상 큰 문제가 없지만 (2) 쿼리문은 string_column열의 모든 레코드 문자열 값을 숫자형으로 형변환하기 때문에 성능 문제가 발생될 수 있다.
(1) SELECT * FROM tbl WHERE number_column='10001';
(2) SELECT * FROM tbl WHERE string_column=10001;
3. 날짜
MySQL에서는 정해진 형태의 날짜 포맷으로 표기하면 자동으로 DATE나 DATETIME 타입으로 형변환하기 때문에 복잡하게 STR_TO_DATE() 같은 함수를 사용하지 않아도 된다. 아래 두 쿼리문은 결과가 같다.
SELECT * FROM tbl WHERE from_date='2011-04-29';
SELECT * FROM tbl WHERE from_date=str_to_date('2011-04-29', '%Y-%m-%d');
4. Boolean
MySQL은 BOOL, BOOLEAN이라는 타입이 있지만 내부적으로 TINYINT로 처리한다. 테이블을 생성할 때 BOOL타입을 주어 생성한 뒤 조회해보면 컬럼의 타입이 TINYINT로 되어 있다.
아래 쿼리를 보면 (1) select문에서는 20값이 보이지만 (2) select문에서는 나타나지 않는다.
불리언 타입을 꼭 사용하고 싶다면 ENUM타입으로 관리하는 것을 추천한다.
CREATE TABLE tb_boolean (
bool_value BOOL
);
INSERT INTO tb_boolean
(bool_value)
VALUES
(FALSE)
, (TRUE)
, (0)
, (1)
, (20);
(1) SELECT * FROM tb_boolean;
(2) SELECT *
FROM tb_boolean
WHERE bool_value IN (TRUE, FALSE);
반응형