首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在两个不同字符集的表之间创建外键

问不能在两个不同字符集的表之间创建外键
EN

Stack Overflow用户
提问于 2017-11-08 12:59:00
回答 2查看 662关注 0票数 2

不同字符集之间的外键不能工作。

我用Symfony和Doctrine来做一个新的项目。但是旧表的默认字符集与UTF-8不同。我的新桌子有UTF8字符集。恢复..。我有一个带有默认字符集= latin1的表和一个UTF-8.中的新表。

UTF8表与latin1表有关系。但我得到了下一个错误:

代码语言:javascript
复制
MySQL: Error 1005; Can't create table (errno: 150)

有一些方法可以在具有不同字符集的表之间生成外键吗?或者,我能用ORM水平来做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-08 13:09:10

有一些方法可以在不同字符集的表之间生成外键吗?

在MySQL级别上,不存在。

外键和引用键中的对应列必须具有类似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不一定相同。对于非二进制(字符)字符串列,字符集和排序规则必须相同。

来源:http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

票数 3
EN

Stack Overflow用户

发布于 2017-11-08 13:15:50

当然,有一种方法可以做到这一点,但并不是在SQL级别。如果由于使用Doctrine而可以删除表中的关系,请尝试在ORM级别上保持关系。

就像这个例子

(票证有一个用户,用户有一个票证。(一对一关系):

代码语言:javascript
复制
class Ticket
{
 /**
  * @var \AppBundle\Entity\User
  *
  * @ORM\OneToOne(targetEntity="AppBundle\Entity\User")
  * @ORM\JoinColumn(name="adeq_user", referencedColumnName="id")
  */
 private $adeqUsers;
}

然后Doctrine get为您创建关系,但是表是相同的,所以当您要求一张票时,您将得到属于它的用户。

与db上的默认字符集无关

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47180387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档