【发布时间】:2020-09-21 18:27:28
【问题描述】:
我想将本地化添加到我的数据库中。我创建了languages 表,我想将外键添加到用户表:
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`name` varchar(30) NOT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(60) DEFAULT NULL,
`registrationDate` datetime DEFAULT current_timestamp(),
`lastLoginDate` datetime DEFAULT NULL,
`isConfirmed` tinyint(1) NOT NULL DEFAULT 0,
`activationKey` varchar(32) NOT NULL,
`resendEmail` tinyint(1) DEFAULT NULL,
`subscribedNews` tinyint(1) NOT NULL DEFAULT 1,
`activated` tinyint(1) DEFAULT 1,
`lang` varchar(5) NOT NULL DEFAULT 'en'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `users`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `email` (`email`);
ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
create table languages(
code varchar(5) primary key,
name varchar(255) not null,
dateFormat varchar(255),
dateTimeFormat varchar(255),
currency varchar(255)
);
ALTER TABLE users
ADD lang varchar(5) NOT NULL DEFAULT 'cs';
ALTER TABLE users ADD CONSTRAINT fk_user_lang FOREIGN KEY (lang) REFERENCES languages(code);
我无法在lang 列上添加外键:
错误代码:150“外键约束格式不正确”
为什么我不能创建 varchar 外键。我不会在语言表中添加 int 主键,因为我想以 /api/users/cs 而不是 /api/users?lang=1 从数据库中获取数据。
谢谢
【问题讨论】:
-
FK 列的两种数据类型必须相同
-
你的代码在这个 db fiddle 中工作:dbfiddle.uk/…。很可能,您没有在数据库中运行完全相同的代码。
-
select version()给了什么? -
@ysth 10.4.11-MariaDB。能否依赖mysql服务器设置?
-
@bluray 只是抓住了稻草,因为似乎没有其他人能够理解您的错误。 dbfiddle.uk/… 请在更改表之前显示
show create table users的输出?
标签: mysql