কম্পিউটার টিউটোরিয়াল

MySQL에서 DOUBLE과 DATE를 VARCHAR에 저장해도 될까?

기술적으로는 가능하지만 권장하지 않습니다. 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 타입을 쓰세요.

  1. MySQL-এ আজ এবং আগামী কালের তারিখवाले রেকর্ড ডেটা কলাম থেকে প্রদর্শন করা

  2. MySQL-এ DATE_FORMAT() ও STR_TO_DATE() ব্যবহার করে ডেট ফরম্যাট করা

  3. MySQL-এ STR_TO_DATE() এবং CURDATE() ব্যবহার করে বর্তমান তারিখের রেকর্ড খুঁজুন

  4. MySQL-এ VARCHAR কলামে স্ট্রিং ও সংখ্যা মিশ্রিত ডেটা সর্ট করা (ORDER BY + 0)