无法在具有不同CHARSET的2个表之间创建外键

时间:2017-11-08 12:59:00

标签: mysql symfony character-encoding doctrine symfony-3.3

跨不同Charset的外键不起作用

我正在使用Symfony和Doctrine来创建一个新项目。但是旧表的默认字符集与UTF-8不同。我的新表有UTF8 Charset。恢复.. 我有一个 DEFAULT CHARSET = latin1 的表和一个 UTF-8的新表。

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

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)));
String line;
while ((line = in.readLine()) != null) { // Line without line ending.
    line = line.trim().replaceAll("\\s+", "\t");
    System.out.println(line);
}

有一些方法可以在具有不同 CHARSET 的表之间创建外键吗? 或者,我可以用ORM级别来做吗?

2 个答案:

答案 0 :(得分:3)

  

有一些方法可以在具有不同表的表之间创建外键   CHARSET?

在MySQL级别上没有没有。

  

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

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

答案 1 :(得分:2)

好的,有一种方法可以做到,但不是 SQL 级别。如果您可以删除表格中的关系,因为您使用的是条款,请尝试使用 ORM 级别进行关联。

就像这个例子一样

故障单有一个用户用户有一个故障单一对一的关系):

class Ticket
{
 /**
  * @var \AppBundle\Entity\User
  *
  * @ORM\OneToOne(targetEntity="AppBundle\Entity\User")
  * @ORM\JoinColumn(name="adeq_user", referencedColumnName="id")
  */
 private $adeqUsers;
}

然后 Doctrine 为您建立关系,但表格是相同的,所以当您要求票证时,您将获得所属的用户。

无论db上的默认字符集