Solución:
Simplemente use “FECHA” sin los corchetes. Los corchetes solo son necesarios para ciertos tipos de columnas en las que desea especificar el número máximo de bytes / caracteres que se pueden almacenar.
Para MySQL, está documentado en https://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html
El siguiente ejemplo explicará su problema. estoy usando MySQL 5.7.18.
En primer lugar, he descrito la estructura de usuarios tabla ya que voy a crear una tabla de publicaciones con CLAVE EXTERNA.
Más tarde creé publicaciones mesa y tiene un FECHA campo nombrado creado con muchas otras columnas.
Finalmente inserté 1 fila en la tabla recién creada.
mysql> desc users;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id | bigint(20) | NO | PRI | NULL | |
| fname | varchar(50) | NO | | NULL | |
| lname | varchar(50) | NO | | NULL | |
| uname | varchar(20) | NO | | NULL | |
| email | text | NO | | NULL | |
| contact | bigint(12) | NO | | NULL | |
| profile_pic | text | NO | | NULL | |
+-------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
mysql> CREATE TABLE posts(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, title text NOT NULL, description text NOT NULL, posted_by bigint, FOREIGN KEY(posted_by) REFERENCES users(id) ON DELETE CASCADE ON UPDATE RESTRICT , created DATE);
Query OK, 0 rows affected (0.01 sec)
mysql> desc posts;
+-------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| title | text | NO | | NULL | |
| description | text | NO | | NULL | |
| posted_by | bigint(20) | YES | MUL | NULL | |
| created | date | YES | | NULL | |
+-------------+------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> INSERT INTO posts(title, description, posted_by, created) values("Getting started with MySQL", "Excellent Database system", 1, "2017-05-26");
Query OK, 1 row affected (0.00 sec)
mysql> select * from posts;
+----+----------------------------+---------------------------+-----------+------------+
| id | title | description | posted_by | created |
+----+----------------------------+---------------------------+-----------+------------+
| 1 | Getting started with MySQL | Excellent Database system | 1 | 2017-05-26 |
+----+----------------------------+---------------------------+-----------+------------+
1 row in set (0.00 sec)
mysql>
El tipo de datos date
por sí solo es suficiente para representar un valor de fecha. El formato importará cuando muestre los datos, para lo cual puede utilizar el FORMAT
función en tu date
columna.
Debo agregar que existe cierta flexibilidad en cuanto al formato al insertar literales de fecha y hora como se documenta aquí.