首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中添加字符类型的外键

在mysql中添加字符类型的外键
EN

Stack Overflow用户
提问于 2014-11-28 07:55:07
回答 1查看 5K关注 0票数 6

在mysql中添加外键(使用phpmyadmin)有问题。

代码语言:javascript
复制
ALTER TABLE `production_x_country` ADD  FOREIGN KEY (`country`) REFERENCES `pmdb_0.3.12`.`countries`(`iso_3166_1`) ON DELETE CASCADE ON UPDATE CASCADE;

#1215 -无法添加外键约束

根据一些研究和测试,我得出结论:CHAR (那个production_x_country.country字段)不是有效的外键字段类型--尽管我在mysql文档中没有发现任何提示。如果我将列类型更改为其他字符类型(如VARCHAR ),则该过程可以工作。

--一个类似的问题在这里得到了“解决”,,但是这个链接的答案不是关于类型问题,而是关于一个国家代码是一个主要的关键(对我来说非常有意义的):https://stackoverflow.com/a/1419235/4302731

表说明:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `countries` (
  `iso_3166_1` char(3) NOT NULL,  <----- primary key to be referenced to
  `name` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `countries` ADD PRIMARY KEY (`iso_3166_1`);



CREATE TABLE IF NOT EXISTS `production_x_country` (
  `production` int(11) NOT NULL,
  `country` char(3) CHARACTER SET utf8 NOT NULL   <----- column that should hold the foreign key
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

有什么解决办法(是的,我可以继续使用varchar,但我不满意)?最重要的是:有什么解释吗

谢谢你的帮助!

解决了-见下面我自己的答案

EN

回答 1

Stack Overflow用户

发布于 2014-11-28 08:09:27

解决了!这不是关于char字段类型,而是关于排序规则

我喜欢使用UTF-8,主要是utf8_bin。我的主键排序也是这样的:

代码语言:javascript
复制
`iso_3166_1` char(3) CHARACTER SET utf8

一旦我将主键的排序规则更改为"latin1_swedish_ci“,外键应用程序就可以工作了。引出一个问题:为什么主键字段的排序(也可能是外键字段的排序,还没有检查)很重要?

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

https://stackoverflow.com/questions/27184211

复制
相关文章

相似问题

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