mysql之强制 Symfony doctrine 迁移命令在映射到 MySQL 时使用 LONGTEXT 作为 json 字段类型而不是 JSON

over140 阅读:105 2024-12-31 21:38:35 评论:0

我将 Symfony 4 与不支持 JSON 类型的 MySQL 数据库 (5.5.57-0ubuntu0.14.04.1) 结合使用。

当我使用 Doctrine yml 配置文件将一个字段映射到“json”时,doctrine:migrations:diff 生成的迁移文件使用 JSON MySQL 类型而不是 LONGTEXT,它以错误结束如果我尝试运行迁移。

每次进行迁移差异时,我都必须手动将 JSON 更改为 LONGTEXT 以进行最后的更改,并删除由于旧更改而对 JSON 所做的更改。

如果在这些迁移之一中您忘记删除“ALTER TABLE CHANGE somefield JSON”,很容易搞砸。

目前,我的解决方案是在 doctrine.yml 配置文件中添加以下内容:

doctrine: 
    dbal: 
      mapping_types: 
           longtext: json 

当我运行 doctrine:migrations:diff -v 时,它会产生一些奇怪但易于跟踪和删除的更改,例如将一些已经是 LONGTEXT 的字段更改为 LONGTEXT。我不知道为什么,我最终必须解决这个问题。

但是,至少,我可以阻止 doctrine 尝试将我的 longtext 更改为映射为 doctrine json 数据类型的 MySQL json 数据类型。

有人遇到过这个问题吗?

谢谢!

请您参考如下方法:

我错了,那样使用“mapping_types”配置。这是没有意义的。解决方法就更简单了,没想到还有下面这个参数:

server_version

只需像这样在 dbal 配置中添加服务器版本:

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


标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号