mysql ERROR 3780 (HY000): Referencing column '... and referenced column '....' in foreign key constraint '...' are incompatible

Forums:

ERROR 3780 (HY000): Referencing column '... and referenced column '....' in foreign key constraint '...' are incompatible.

Например:

ERROR 3780 (HY000): Referencing column 'category_id' and referenced column 'id' in foreign key constraint 'subcategories_ibfk_1' are incompatible.

Для запроса:

CREATE TABLE subcategories 
(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT 'id subcategories',
category_id SMALLINT, 
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE, 
name VARCHAR(255) NOT NULL COMMENT 'Name subcategory',
description text NOT NULL COMMENT 'Description subcategory');

При этом таблица categories на id которой мы ссылаемся создавалась так:

CREATE TABLE categories (
  id smallint unsigned NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  description text NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

Причина

Дело в несовместимости типа создаваемого внешнего ключа для столбца (subcategories.category_id) и той колонки в уже существующей таблице, на которую он будет ссылаться (categories.id).

В данном случае subcategories.category_id в новой таблице создан как обычнй знаковый тип, а categories.id при этом указан явно как беззнаковый тип

Возможное решение

Сделать типы обоих столбцов идентичными. В данном случае либа оба знаковые либо оба беззнакомые.

Key Words for FKN + antitotal forum (CS VSU):