兩件事情:
首先,你STR_TO_DATE()格式必須輸入字符串的格式相匹配。如果你的輸入字符串是10/21/2016 15:02
,那麼你的格式是%m/%d/%Y %H:%i
。
見這裏的格式代碼的參考:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
其次,使用更新不會更改列的數據類型,它只是改變了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 |
+---------------------+
現在它的格式正確,但它仍然是一個varchar。
mysql> alter table t modify v datetime;
mysql> select * from t;
+---------------------+
| v |
+---------------------+
| 2016-10-21 15:02:00 |
+---------------------+
現在數據類型已更改。
mysql> show create table t\G
CREATE TABLE `t` (
`v` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4