Mysql
 sql >> Base de données >  >> RDS >> Mysql

Grails :erreur dans la syntaxe SQL lors du changement de dialecte d'hibernation

Pourquoi voudriez-vous utiliser MyISAM ??? Il ne prend pas en charge les clés étrangères ou les transactions. Et il est rarement plus rapide qu'InnoDB car InnoDB utilise des verrous de ligne et MVCC, par opposition aux verrous de table complète de MyISAM.

Cela dit, vous pouvez le faire fonctionner. Vous devez utiliser une version plus récente de MySQL depuis le type l'attribut a été obsolète pendant un certain temps et n'est plus pris en charge - vous devez utiliser ENGINE Au lieu. Il n'y a pas de dialecte qui supporte cela (notez que org.hibernate.dialect.MySQL5InnoDBDialect fait ce qu'il faut pour InnoDB), vous devez donc créer le vôtre.

Créez cette classe dans src/groovy ou src/java (changez le nom du package et/ou de la classe) :

package com.mycompany.myapp

import org.hibernate.dialect.MySQLMyISAMDialect

class MySQL5MyISAMDialect extends MySQLMyISAMDialect {
   String getTableTypeString() {
      " ENGINE=MyISAM"
   }
}

et référencez-le dans DataSource.groovy comme vous l'avez montré dans votre question :

dialect = com.mycompany.myapp.MySQL5MyISAMDialect