我正在将 Grails 与 mySQL 数据库一起使用,并且尝试更改数据库引擎。据我研究,这可以最好地做到
dialect = "org.hibernate.dialect.[MyDialect]"
在 DataSource.groovy 配置中。但是,当我将方言设置为 org.hibernate.dialect.MySQLMyISAMDialect 时,表的创建失败并出现错误:
您的 SQL 语法有错误;检查手册
与您的 MySQL 服务器版本相对应,以便使用正确的语法
第 1 行“type=MyISAM”附近
我后来也尝试用以下方法更改表格:
sql.execute("ALTER TABLE book ENGINE = MYISAM;")
这实际上是有效的,但是在创建后更改引擎时,表的所有外键都会被删除。
我应该如何避免错误并正常更换发动机?
为什么要使用MyISAM???它不支持外键或事务。而且它很少比 InnoDB 快,因为 InnoDB 使用行锁和 MVCC,而不是 MyISAM 的全表锁。
话虽如此,您可以让它发挥作用。您必须使用较新版本的 MySQL,因为type
属性已被弃用一段时间,现在不受支持 - 您必须使用ENGINE
反而。没有方言支持这一点(请注意org.hibernate.dialect.MySQL5InnoDBDialect
为 InnoDB 做了正确的事情)所以你需要创建自己的。
在 src/groovy 或 src/java 中创建此类(更改包和/或类名):
package com.mycompany.myapp
import org.hibernate.dialect.MySQLMyISAMDialect
class MySQL5MyISAMDialect extends MySQLMyISAMDialect {
String getTableTypeString() {
" ENGINE=MyISAM"
}
}
并在 DataSource.groovy 中引用它,如您在问题中所示:
dialect = com.mycompany.myapp.MySQL5MyISAMDialect
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)