【问题标题】:Using liquibase changelog to create a table with a datetime field, how come that field become a text type使用liquibase changelog创建带有日期时间字段的表,该字段怎么变成文本类型
【发布时间】:2012-07-06 02:10:10
【问题描述】:

我使用 liquibase databaseChangeLog 创建了一个表:

      <changeSet id="1" author="person1">
        <createTable tableName="schedule">
         <column name="id" type="varchar(20)">
                <constraints primaryKey="true" nullable="false"/>
         </column>
         <column name="worktime" type="datetime">
         </column>
  </createTable>
  </changeSet>

但是,在验证我的 sqlite 数据库时,表架构如下:

sqlite> .schema schedule
CREATE TABLE schedule (
id TEXT NOT NULL, 
worktime TEXT, 
CONSTRAINT PK_SCHEDULE 
PRIMARY KEY (id));

您看到 varchar 和 datatime 都已更改为文本类型。我应该添加到 changeSet 表定义中以使其正常工作。顺便说一句,我使用的是 liquibase-1.9.3.jar。现在我必须直接从 sqlite DB 更正它们。谢谢。

【问题讨论】:

    标签: sqlite data-migration liquibase changelog


    【解决方案1】:

    SQLite 没有日期时间数据类型。它只支持数字、文本和 blob:

    引用http://www.sqlite.org/datatype3.html

    SQLite 没有专门用于存储日期和/或时间的存储类

    【讨论】:

    • 但是当我打开我的 sqlite 数据库,并创建一个 datetime、varchar 数据类型的表时,它的创建没有任何问题。
    • @user1342336: 什么是“datetime, varchar”类型?
    • 在 sqlite 中查看下面的表模式:sqlite> .schema test CREATE TABLE test(id integer not null, type varchar(10), shiptime datetime, Primary key(id)); sqlite> 我不太明白为什么只有3种数据类型?请提供更多细节。谢谢。
    • @user1342336:这就是 SQLite 的开发人员选择实现的。在我发布的链接中或多或少地解释了
    猜你喜欢
    • 2013-03-02
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2020-11-11
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多