
# 如何处理DWS建表时date类型字段自动转换为timestamp类型的问题？
创建数据库时，可通过**DBCOMPATIBILITY** 参数指定兼容的数据库类型，**DBCOMPATIBILITY**取值范围：ORA、TD、MySQL。分别表示兼容Oracle、Teradata和MySQL数据库。如果创建数据库时不指定该参数，则默认为ORA，在ORA兼容模式下，date类型会自动转换为timestamp(0)，只有在MySQL兼容模式下才支持date类型。
为解决以上问题，需要将兼容模式修改为MySQL。DWS不支持修改现有数据库的兼容模式，只能在创建数据库时指定兼容模式。DWS从8.1.1集群版本开始支持MySQL兼容模式类型，可参考如下示例进行操作：
```
gaussdb=> CREATE DATABASE mydatabase DBCOMPATIBILITY='mysql';
CREATE DATABASE
gaussdb=> \c mydatabase
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "mydatabase" as user "dbadmin".
mydatabase=> create table t1(c1 int, c2 date);
NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default.
HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
CREATE TABLE
```
若无法采用重建数据库更改兼容模式的方法，可通过修改字段类型来规避date类型会自动转换为timestamp类型。例如，将日期以string类型的形式插入表中，可参考如下示例操作：
```
gaussdb=> CREATE TABLE mytable (a date,b int);
CREATE TABLE
gaussdb=> INSERT INTO mytable VALUES(date '12-08-2023',01);
INSERT 0 1
gaussdb=> SELECT * FROM mytable;
          a          | b
---------------------+---
 2023-12-08 00:00:00 | 1
(1 row)
gaussdb=> ALTER TABLE mytable MODIFY a VARCHAR(20);
ALTER TABLE
gaussdb=> INSERT INTO mytable VALUES('2023-12-10',02);
INSERT 0 1
gaussdb=> SELECT * FROM mytable;
          a          | b
---------------------+---
 2023-12-08 00:00:00 | 1
 2023-12-10          | 2
(2 rows)
```
