【问题标题】:Impossible to generate boolean column with console无法使用控制台生成布尔列
【发布时间】:2017-06-15 09:53:17
【问题描述】:

我正在尝试在实体上添加新的布尔属性,但是当我执行学说:架构:更新命令时,我收到以下错误:

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1064 Syntax error near 
'generated TINYINT(1) DEFAULT '1'' at line 1

这是我的代码:

/**
 * @var boolean
  *
  * @ORM\Column(type="boolean", nullable=true, options={"default":true})
  */
 private $generated;

我还尝试将默认设置为01false...

我也试过这个:

private $generated = 0

private $generated = false

...

我也尝试通过构造函数设置默认值,但没有任何效果。

最后,我尝试不使用任何默认值,得到了这个错误:

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1064 Syntax error near     'generated TINYINT(1) DEFAULT NULL' at line 1

看来我是唯一一个使用 Symfony 得到这个错误的人 :( 如果有人有任何想法... 非常感谢

查尔斯

【问题讨论】:

    标签: mysql sql symfony boolean


    【解决方案1】:

    generated是mysql中的保留字,所以要quote the name according to the documentation

    由于保留字冲突,有时需要引用列名或表名。 Doctrine 不会自动引用标识符,因为它导致的问题多于解决的问题。引用表和列名需要在定义中使用刻度明确地完成。

    之后就可以直接初始化了:

    /**
      * @var boolean
      *
      * @ORM\Column(name=`generated`, type="boolean", nullable=true)
      */
     private $generated = true;
    

    并使用force 参数调用您的更新语句,例如doctrine:schema:update --force

    【讨论】:

    • 它不起作用 :( 即使我没有设置任何默认值,我也会收到 SQL 错误。但感谢您的帮助!
    • 有没有试过在注解中加name=`generated`,可能是sql中的保留字。您需要使用刻度;-)
    • 谢谢!这就是问题所在……generated 似乎是 mysql 的保留字
    • 不客气。我已经相应地更新了答案。
    【解决方案2】:

    查看以下链接了解更多信息

    https://dev.mysql.com/doc/refman/5.7/en/keywords.html#ftn.idm140475758235952

    'generated 是 mysql 5.7.6 以来的 reservedrd 关键字

    【讨论】:

    • 谢谢,这是我的问题!
    猜你喜欢
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2012-10-23
    • 2012-07-21
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多