gpt4 book ai didi

mysql - DDL 生成上的 Slick 2.1 MySqlSyntaxErrorException

转载 作者:行者123 更新时间:2023-11-29 00:10:16 24 4
gpt4 key购买 nike

在我的测试中,我试图根据 slick 中定义的模式设置一个测试数据库,而该模式又是使用基于现有数据库的 slick 代码生成器生成的。为此,我扩展了 WithApplication 并重新定义了 around 方法,如下所示:

abstract class WithDbData extends WithApplication {
def ds = DB.getDataSource("test")
def slickDb = Database.forDataSource(ds)
override def around[T: AsResult](t: => T): Result = super.around {
setup
val result = AsResult.effectively(t)
teardown
result
}

def setup = {
slickDb.withSession { implicit session =>
ddl.create
}
}

def teardown = {
slickDb.withSession { implicit session =>
ddl.drop
}
}
}

但是当我运行测试时,我得到了一个

MySqlSyntaxErrorException : Column length too big for column 'text' (max = 21845); use BLOB or TEXT instead  (null:-2).

我正在使用 MySql 进行开发和测试,代码生成器生成的部分架构如下所示:

/** Database column text DBType(TEXT), Length(65535,true) */
val text: Column[String] = column[String]("text", O.Length(65535,varying=true))

似乎 ddl 生成器正在尝试将文本列创建为 varchar 或类似的东西,而不是像最初预期的那样创建为文本,因为在原始数据库中该列是文本类型。

在自动生成的光滑数据模型中,我有 profile = scala.slick.driver.MySQLDriver,我还在我的测试类中导入了 scala.slick.driver.MySQLDriver.simple._,所以我应该没有任何问题因为混合驱动程序。

我正在使用 play 2.3、slick 2.1.0、codegen 2.1.0 和 play-slick 0.8.0。

我将不胜感激。

最佳答案

这是代码生成器中的错误。 github.com/slick/slick/issues/975

您可以通过自定义代码生成器来解决这个问题。参见 http://slick.typesafe.com/doc/2.1.0/code-generation.html

一个简单的方法是覆盖 def dbType = true 。您失去了跨供应商的可移植性,但获得了准确的类型。您可能必须从 def 选项中过滤长度,不确定。

也在这里讨论:https://github.com/slick/slick/issues/982

关于mysql - DDL 生成上的 Slick 2.1 MySqlSyntaxErrorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25514012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com