Hai điều:
Đầu tiên, định dạng str_to_date () của bạn phải khớp với định dạng của chuỗi đầu vào. Nếu chuỗi đầu vào của bạn là 10/21/2016 15:02
, thì định dạng của bạn là %m/%d/%Y %H:%i
.
Xem tham chiếu cho các mã định dạng tại đây: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html# Chức năng_date-format
Thứ hai, việc sử dụng UPDATE không thay đổi kiểu dữ liệu của cột, nó chỉ thay đổi nội dung của chuỗi varchar.
mysql> create table t (v varchar(50));
mysql> insert into t values ('10/21/2016 15:02');
mysql> update t set v = str_to_date(v, '%m/%d/%Y %H:%i');
mysql> select * from t;
+---------------------+
| v |
+---------------------+
| 2016-10-21 15:02:00 |
+---------------------+
Bây giờ nó ở đúng định dạng, nhưng nó vẫn là một varchar.
mysql> alter table t modify v datetime;
mysql> select * from t;
+---------------------+
| v |
+---------------------+
| 2016-10-21 15:02:00 |
+---------------------+
Bây giờ, loại dữ liệu đã được thay đổi.
mysql> show create table t\G
CREATE TABLE `t` (
`v` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4