@@ -3693,16 +3693,17 @@ protected function get_column_definitions( $table_name, $columns ) {
3693
3693
$ auto_increment_column = $ this ->get_autoincrement_column ( $ table_name );
3694
3694
$ column_definitions = array ();
3695
3695
foreach ( $ columns as $ column ) {
3696
+ $ mysql_type = $ this ->get_cached_mysql_data_type ( $ table_name , $ column ->name );
3696
3697
$ is_auto_incr = $ auto_increment_column && strtolower ( $ auto_increment_column ) === strtolower ( $ column ->name );
3697
3698
$ definition = array ();
3698
3699
$ definition [] = '` ' . $ column ->name . '` ' ;
3699
- $ definition [] = $ this -> get_cached_mysql_data_type ( $ table_name , $ column -> name ) ?? $ column ->name ;
3700
+ $ definition [] = $ mysql_type ?? $ column ->name ;
3700
3701
3701
3702
if ( '1 ' === $ column ->notnull ) {
3702
3703
$ definition [] = 'NOT NULL ' ;
3703
3704
}
3704
3705
3705
- if ( null !== $ column -> dflt_value && '' !== $ column-> dflt_value && ! $ is_auto_incr ) {
3706
+ if ( $ this -> column_has_default ( $ column, $ mysql_type ) && ! $ is_auto_incr ) {
3706
3707
$ definition [] = 'DEFAULT ' . $ column ->dflt_value ;
3707
3708
}
3708
3709
@@ -3858,6 +3859,22 @@ function ( $row ) use ( $name_map ) {
3858
3859
);
3859
3860
}
3860
3861
3862
+ /**
3863
+ * Checks if column should define the default.
3864
+ *
3865
+ * @param stdClass $column The table column
3866
+ * @param string $mysql_type The MySQL data type
3867
+ *
3868
+ * @return boolean If column should have a default definition.
3869
+ */
3870
+ private function column_has_default ( $ column , $ mysql_type ) {
3871
+ if ( null !== $ column ->dflt_value && '' !== $ column ->dflt_value && ! in_array ( strtolower ( $ mysql_type ), array ( 'datetime ' , 'date ' , 'time ' , 'timestamp ' , 'year ' ), true ) ) {
3872
+ return true ;
3873
+ }
3874
+
3875
+ return false ;
3876
+ }
3877
+
3861
3878
/**
3862
3879
* Consumes data types from the query.
3863
3880
*
0 commit comments