当Map到mysql时,强制symfony原则迁移命令对json字段类型使用longtext而不是json

oo7oh9g9  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(332)

我将symfony4与不支持json类型的mysql数据库(5.5.57-0ubuntu0.14.04.1)一起使用。
当我使用yml配置文件将字段Map到“json”时,迁移文件generatet by doctrine:migrations:diff 使用json-mysql类型而不是longtext,如果我尝试运行迁移,结果会出错。
每次进行迁移差异时,我都必须手动将json更改为longtext以用于最后的更改,并删除由于旧的更改而对json所做的更改。
如果在其中一个迁移中忘记删除“altertablechangesomefieldjson”,那么很容易出错。
目前,我的解决方案是在doctrine.yml配置文件中添加以下内容:

doctrine:
    dbal:
      mapping_types:
           longtext: json

它使一些奇怪的,但很容易跟踪和删除,改变时,我运行 doctrine:migrations:diff -v ,例如将一些已经是长文本的字段更改为长文本。我不知道为什么,最终我必须解决它。
但是,至少,我可以阻止条令尝试将longtext更改为mysql json数据类型,这些数据类型Map为条令json数据类型。
有人遇到这个问题吗?
谢谢!

v8wbuo2f

v8wbuo2f1#

对我来说,我遇到了同样的问题,解决方案是进入创建的迁移(例如:version20190306110143.php)并将数据类型“json”更改为“longtext”!!
事实上,这对我很有效,但坦白说,我不知道这是否会造成时间上的问题。不管怎样,如果发生这种事,我会把它们贴出来
谢谢

cl25kdpy

cl25kdpy2#

我这样使用“Map类型”配置是错误的。这毫无意义。解决方案更简单,我没有意识到以下参数的存在: server_version 只需在dbal配置中添加服务器版本,如下所示:

doctrine:
    dbal:
        driver: 'pdo_mysql'
        server_version: '5.5.57'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

相关问题