기술적으로는 가능하지만 권장하지 않습니다. VARCHAR로 저장하면 타입 안전성, 정렬, 연산, 인덱스 효율에서 불이익이 큽니다.
VARCHAR로 저장 예제
mysql> CREATE TABLE DemoTable (
-> Amount VARCHAR(20),
-> JoiningDate VARCHAR(20)
-> );
Query OK, 0 rows affected (0.96 sec)
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)
저장된 데이터
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)
조회 시 타입 변환
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)
문제점:
- 숫자 정렬 안 됨: '100' < '20' (문자열 정렬)
- 날짜 정렬 안 됨: 'Jan...' < 'Feb...' (알파벳 순)
- 연산 시 매번 변환 필요, 인덱스 활용도 낮음
- 잘못된 형식 데이터 들어갈 수 있음
권장: 숫자는 DECIMAL/DOUBLE, 날짜는 DATE/DATETIME 타입을 쓰세요.