我正在使用Grails和mySQL数据库,我正在尝试更改数据库引擎。据我所研究,这可以用
做得最好 dialect = "org.hibernate.dialect.[MyDialect]"
DataSource.groovy配置中的。但是当我将方言设置为org.hibernate.dialect.MySQLMyISAMDialect时,我的表的创建失败并显示错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'类型= MyISAM'在第1行
我还试图稍后改变表:
sql.execute("ALTER TABLE book ENGINE = MYISAM;")
这实际上有效,但在创建后更改引擎时,所有外键都会被删除。
我应该如何避免错误并正常更换发动机?
答案 0 :(得分:1)
为什么要使用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