【问题标题】:Grails: error in SQL syntax when using MYISAM dialect [duplicate]Grails:使用MYISAM方言时SQL语法错误[重复]
【发布时间】:2012-08-22 15:30:44
【问题描述】:

可能重复:
Grails: error in SQL syntax when changing the hibernate dialect

我正在将 Grails 与 mySQL 数据库一起使用,并且我正在尝试更改数据库引擎。据我研究,这可以做到最好

 dialect = "org.hibernate.dialect.[MyDialect]" 

在 DataSource.groovy 配置中。但是当我将方言设置为 org.hibernate.dialect.MySQLMyISAMDialect 时,我的表创建失败并出现错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的“type=MyISAM”附近

我后来也尝试过修改表格:

sql.execute("ALTER TABLE book ENGINE = MISAM;")

这确实有效,但在创建后更改引擎时,表的所有外键都会被删除。

我应该如何避免错误并正常更换引擎?

【问题讨论】:

    标签: mysql hibernate grails


    【解决方案1】:

    帕夫,

    我正在运行 MySQL 5.5.25、Grails 2.1.0 和 grails hibernate-2.1.0 插件,它在后台使用 hibernate-core 3.6.10.FINAL。

    这可能是您的 Grails 版本(更具体地说,是 Grails 使用的 Hibernate 的底层版本)和您的 MySQL 版本的问题。

    这是Hibernate JIRA: HHH-5988 上报告的错误。

    我使用 InnoDB 作为我的引擎,并尝试在我的 DataSource.groovy 中按如下方式交换 MyISAM:

    dataSource {
        pooled = true
        driverClassName = "com.mysql.jdbc.Driver"
        // dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
        dialect = "org.hibernate.dialect.MySQLMyISAMDialect"
        username = "study"
        password = "********"
    }
    

    我在创建表时也遇到了错误。

    这是我得到的错误之一的示例,它对应于 Hibernate JIRA 上报告的错误:

    | Error 2012-08-22 13:15:12,739 [pool-4-thread-1] ERROR hbm2ddl.SchemaExport  
    - Unsuccessful: create table user (id bigint not null auto_increment, 
    version bigint not null, 
    login varchar(255) not null unique, 
    password varchar(255) not null, 
    role varchar(5) not null, 
    primary key (id)) type=MyISAM
    

    上述 Hibernate JIRA 错误中的一个 cmet 是正在创建自己的 custom dialect for MySQL 5 MyISAM 的用户。

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2012-01-29
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多