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

MySQL에서 VARCHAR 타입에 double과 date를 저장해도 괜찮을까요?

MySQL에서 VARCHAR 타입에 double과 date를 저장해도 괜찮을까요?

네, 기술적으로는 VARCHAR 컬럼에 double(숫자)과 date(날짜) 값을 문자열 형태로 저장하는 것이 가능합니다. 다만 실무 환경에서는 가급적 DOUBLE, DECIMAL, DATE 같은 전용 데이터 타입을 사용하는 것이 좋습니다. 여기서는 VARCHAR에 저장된 값들을 어떻게 DOUBLE과 DATE 타입처럼 활용할 수 있는지 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 Amount와 JoiningDate 두 컬럼을 VARCHAR(20) 타입으로 갖는 테이블을 생성합니다.

mysql> create table DemoTable
    -> (
    -> Amount varchar(20),
    -> JoiningDate varchar(20)
    -> );
Query OK, 0 rows affected (0.96 sec)

2. 레코드 삽입

insert 명령어를 사용하여 숫자와 날짜를 문자열 형태로 저장한 레코드들을 삽입합니다.

mysql> insert into DemoTable values('150.50','Oct 10,2019');
Query OK, 1 row affected (0.91 sec)
mysql> insert into DemoTable values('173.45','Sept 11,2018');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('173.90','Jan 01,2017');
Query OK, 1 row affected (0.16 sec)

3. 저장된 데이터 확인

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable;

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

+--------+--------------+
| Amount | JoiningDate  |
+--------+--------------+
| 150.50 | Oct 10,2019  |
| 173.45 | Sept 11,2018 |
| 173.90 | Jan 01,2017  |
+--------+--------------+
3 rows in set (0.00 sec)

4. VARCHAR 값을 DOUBLE 및 DATE 타입으로 변환

이제 산술 연산(+0.0)을 통해 VARCHAR로 저장된 숫자를 DOUBLE로 변환하고, str_to_date() 함수를 사용해 날짜 문자열을 DATE 타입으로 변환하여 조회합니다.

mysql> select Amount+0.0 as DoubleValue,str_to_date(JoiningDate,'%M %d,%Y') as Date from DemoTable;

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

+-------------+------------+
| DoubleValue | Date       |
+-------------+------------+
|      150.5 | 2019-10-10 |
|     173.45 | 2018-09-11 |
|      173.9 | 2017-01-01 |
+-------------+------------+
3 rows in set (0.04 sec)

참고: 올바른 데이터 타입 사용의 중요성

VARCHAR에 숫자나 날짜를 저장하면 데이터 무결성 검증이 어렵고, 인덱스 성능 저하, 정렬 및 비교 시 오류 등 여러 문제가 발생할 수 있습니다. 따라서 금액 데이터는 DECIMAL 또는 DOUBLE, 날짜 데이터는 DATE 타입을 직접 사용하는 것이 훨씬 안전하고 효율적입니다. 위 예제처럼 변환 함수를 활용하는 방식은 기존 데이터를 마이그레이션하거나 임시로 처리할 때 유용하게 사용할 수 있습니다.