开发者

MySQL error when creating tables through liquibase

I'm using Grails 1.3.7 + MySQL 5.5 + Liquibase through the database-migration plugin 0.2.1.

When I'm in my development environment, I have Hibernate configured to use "create-drop" but in my QA environment, I want to use liquibase to create my tables. Here is my environments config:

environments {
    development {
        dataSource {
            configClass = GrailsAnnotationConfiguration.class
            pooled = false
            driverClassName = "com.mysql.jdbc.Driver"
            username = "root"
            password =  ""
            dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
            dbCreate = "create-drop"
            url = "jdbc:mysql://localhost/dripita_dev"      
        }
    }
    localQa {
        dataSource {
            configClass=GrailsAnnotationConfiguration.class
            pooled=false
            driverClassName="com.mysql.jdbc.Driver"
            username="root"
            password=""
            dialect="org.hibernate.dialect.MySQL5InnoDBDialect"
            url="jdbc:mysql://localhost/dripita_localqa"        
        }
    }
 ...
}

When I bring the app up in dev mode, the database tables are create fine. I do the following to create the changelog:

$ grails dbm-generate-gorm-changelog changelog.groovy

Which looks like this:

changeSet(author: "javidjamae (generated)", id: "1309959832163-2") {
    createTable(tableName: "payment") {
        column(autoIncrement: "true", name: "id", type: "bigint") {
            constraints(nullable: "false", primaryKey: "true", primaryKeyName: "paymentPK")
        }

        column(name: "version", type: "bigint") {
            constraints(nullable: "false")
        }

        column(name: "buyer_id", type: "bigint") {
          开发者_JAVA技巧  constraints(nullable: "false")
        }

        column(name: "buyer_information_id", type: "bigint")

        column(name: "currency", type: "varchar(255)") {
            constraints(nullable: "false")
        }

        column(name: "discount_cart_amount", type: "decimal(19,2)") {
            constraints(nullable: "false")
        }

        column(name: "paypal_transaction_id", type: "varchar(255)")

        column(name: "status", type: "varchar(9)") {
            constraints(nullable: "false")
        }

        column(name: "tax", type: "double precision(19)") {
            constraints(nullable: "false")
        }

        column(name: "transaction_id", type: "varchar(255)")
    }
}

Then I try to create the tables from the changelog:

$ grails -Dgrails.env=localQa dbm-update

But, when I run the dbm-update, I get the following error:

07/06 08:52:41 INFO  [main]: liquibase  - Successfully acquired change log lock
07/06 08:52:42 INFO  [main]: liquibase  - Reading from `DATABASECHANGELOG`
07/06 08:52:42 INFO  [main]: liquibase  - Reading from `DATABASECHANGELOG`
07/06 08:52:42 ERROR [main]: liquibase  - Error executing SQL CREATE TABLE `payment` (`id` BIGINT AUTO_INCREMENT  NOT NULL, `version` BIGINT NOT NULL, `buyer_id` BIGINT NOT NULL, `buyer_information_id` BIGINT, `currency` VARCHAR(255) NOT NULL, `discount_cart_amount` decimal(19,2) NOT NULL, `paypal_transaction_id` VARCHAR(255), `status` VARCHAR(9) NOT NULL, `tax` double precision(19) NOT NULL, `transaction_id` VARCHAR(255), CONSTRAINT `paymentPK` PRIMARY KEY (`id`)) ENGINE=InnoDB
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') NOT NULL, `transaction_id` VARCHAR(255), CONSTRAINT `paymentPK` PRIMARY KEY (`' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.Util.getInstance(Util.java:381)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)

When I copy/paste the create statement in MySQL, I get the same error. I even took the ENGINE=InnoDB off to see if that made a difference, but it didn't. Any ideas?

FYI: I installed MySQL using HomeBrew on my Mac.


My guess is that your QA db doesn't know what the datatype double precision(19) is.
Try changing it to just double precision.

If that fails, consider using another datatype: The doc says that double precision is a "nonstandard variation"

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜