Php 条令更新——Mysql错误号:150

Php 条令更新——Mysql错误号:150,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,我在尝试更新表时遇到问题。我正在尝试运行以下命令: sudo -u www-data -H ./app/console doctrine:schema:update --dump-sql ALTER TABLE users ADD CONSTRAINT FK_1483A5E9A35D7AF0 FOREIGN KEY (invitation_id) REFERENCES Invitation (code); CREATE UNIQUE INDEX UNIQ_1483A5E9A35D7AF0

我在尝试更新表时遇到问题。我正在尝试运行以下命令:

sudo -u www-data -H ./app/console doctrine:schema:update --dump-sql
ALTER TABLE users ADD CONSTRAINT FK_1483A5E9A35D7AF0 FOREIGN KEY (invitation_id)    REFERENCES Invitation (code);
CREATE UNIQUE INDEX UNIQ_1483A5E9A35D7AF0 ON users (invitation_id);
基于此配置:

#../Entity/Users.php

/**
 * @ORM\OneToOne(targetEntity="Invitation", inversedBy="user")
 * @ORM\JoinColumn(referencedColumnName="code")
 * @Assert\NotNull(message="Your invitation is wrong")
 */
protected $invitation;

#../Entity/Invitations.php

/** @ORM\OneToOne(targetEntity="Users", mappedBy="invitation", cascade={"persist", "merge"}) */
protected $user;
它给了我一个错误:

[Doctrine\DBAL\DBALException]
An exception occurred while executing 'ALTER TABLE users ADD CONSTRAINT FK_1483A5E9F11D61A2 FOREIGN KEY (invitation) REFERENCES Invitation (code)':
SQLSTATE[HY000]: General error: 1005 Can't create table 'loopanime-mvc.#sql-402_bc3' (errno: 150)
两个表都在InnoDb上,集合为ut8_unicode_ci。我没有尝试运行手动创建索引,因为这不是我想要的!!但是为什么在FK之前理论没有首先创建IDX

我怎样才能解决我的难题。非常感谢。抱歉,如果问题不清楚,我无法描述更多…

(抱歉,我还不能写评论) 您是否检查过这两个字段的类型是否完全相同?Errno 150通常是由该错误产生的…

(很抱歉,我还不能写评论) 您是否检查过这两个字段的类型是否完全相同?Errno 150通常是由该错误产生的…

(很抱歉,我还不能写评论) 您是否检查过这两个字段的类型是否完全相同?Errno 150通常是由该错误产生的…

(很抱歉,我还不能写评论)
您是否检查过这两个字段的类型是否完全相同?Errno 150通常是由这个错误产生的…

它是固定的,这是结构上的差异。可能是因为表中已有内容,无法创建FK,所以无法创建默认为NULL的列

删除所有信息/在列上放置一些哑值并更改默认值解决了问题


谢谢大家的支持

固定,结构上有差异。可能是因为表中已有内容,无法创建FK,所以无法创建默认为NULL的列

删除所有信息/在列上放置一些哑值并更改默认值解决了问题


谢谢大家的支持

固定,结构上有差异。可能是因为表中已有内容,无法创建FK,所以无法创建默认为NULL的列

删除所有信息/在列上放置一些哑值并更改默认值解决了问题


谢谢大家的支持

固定,结构上有差异。可能是因为表中已有内容,无法创建FK,所以无法创建默认为NULL的列

删除所有信息/在列上放置一些哑值并更改默认值解决了问题



谢谢大家的支持

Errno 150可能是由数据类型的差异引起的,但如果表中有不满足约束的数据,也可能是由该差异引起的。所以我猜在
users
中有一些行引用了一个不存在的邀请代码。我已经截断了这两个表,但仍然没有做到这一点。如果我手动添加索引,然后创建FK,它就会工作。我认为这是一个理论错误,把它放在最后。或者我的注释有问题。你使用的是什么版本的MySQL?从MySQL 4.1.2开始,创建外键应该会隐式地创建所需的索引,这是一个古老的历史产物,按照今天的标准。对不起,比尔,你也是对的,下面的问题已经解决了!非常感谢。Errno 150可能是由数据类型的差异引起的,但如果表中有不满足约束的数据,也可能是由该差异引起的。所以我猜在
users
中有一些行引用了一个不存在的邀请代码。我已经截断了这两个表,但仍然没有做到这一点。如果我手动添加索引,然后创建FK,它就会工作。我认为这是一个理论错误,把它放在最后。或者我的注释有问题。你使用的是什么版本的MySQL?从MySQL 4.1.2开始,创建外键应该会隐式地创建所需的索引,这是一个古老的历史产物,按照今天的标准。对不起,比尔,你也是对的,下面的问题已经解决了!非常感谢。Errno 150可能是由数据类型的差异引起的,但如果表中有不满足约束的数据,也可能是由该差异引起的。所以我猜在
users
中有一些行引用了一个不存在的邀请代码。我已经截断了这两个表,但仍然没有做到这一点。如果我手动添加索引,然后创建FK,它就会工作。我认为这是一个理论错误,把它放在最后。或者我的注释有问题。你使用的是什么版本的MySQL?从MySQL 4.1.2开始,创建外键应该会隐式地创建所需的索引,这是一个古老的历史产物,按照今天的标准。对不起,比尔,你也是对的,下面的问题已经解决了!非常感谢。Errno 150可能是由数据类型的差异引起的,但如果表中有不满足约束的数据,也可能是由该差异引起的。所以我猜在
users
中有一些行引用了一个不存在的邀请代码。我已经截断了这两个表,但仍然没有做到这一点。如果我手动添加索引,然后创建FK,它就会工作。我认为这是一个理论错误,把它放在最后。或者我的注释有问题。你使用的是什么版本的MySQL?从MySQL 4.1.2开始,创建外键应该会隐式地创建所需的索引,这是一个古老的历史产物,按照今天的标准。对不起,比尔,你也是对的,下面的问题已经解决了!非常感谢。恐怕这不是正确的答案——正如我在另一条评论中所说的,我截断了两个表,但仍然存在这个问题。在教义上,如果你知道,通过我放置东西的方式,它会创造出完全相同的钥匙,具有相同的类型和长度,你是对的。我截断了,但我的列是用默认的NULL创建的,并且它的前导错误。修正了谢谢:)我恐怕这不是正确的答案——正如我在另一条评论中所说的,我截断了两个表,仍然存在这个问题。如果你知道