12.

【MySQLエラー】Incorrect column specifier for column 'カラム名'

編集
この記事の要点
  • Incorrect column specifier for column 'カラム名'MySQL で AUTO_INCREMENT を不適切な型に指定したエラー
  • AUTO_INCREMENT は整数型 (INT/BIGINT) のみで、CHAR / VARCHAR には付けられない
  • 原因 ①: id VARCHAR(36) AUTO_INCREMENT のようにした
  • 原因 ②: 主キーがない状態で AUTO_INCREMENT を付けた
  • 対処: 型を INT / BIGINT に変更、または UUID なら手動生成方式に

 

エラーの状況

CREATE TABLE users (
    id VARCHAR(36) NOT NULL AUTO_INCREMENT,
    name VARCHAR(100),
    PRIMARY KEY (id)
);
-- ERROR 1063 (42000): Incorrect column specifier for column 'id'

MySQL の AUTO_INCREMENT整数型 (TINYINT / SMALLINT / MEDIUMINT / INT / BIGINT) 限定です。VARCHAR / CHAR には付けられません。

原因と対処

原因 1: 整数以外の型に AUTO_INCREMENT

-- ダメな例
CREATE TABLE users (
    id VARCHAR(36) NOT NULL AUTO_INCREMENT,  -- ← VARCHAR + AUTO_INCREMENT は不可
    ...
);

-- 修正案 1: INT に変える
CREATE TABLE users (
    id BIGINT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    ...
);

-- 修正案 2: UUID を使う(AUTO_INCREMENT は使わず手動セット)
CREATE TABLE users (
    id CHAR(36) NOT NULL DEFAULT (UUID()),  -- MySQL 8 では DEFAULT (UUID()) が使える
    ...
    PRIMARY KEY (id)
);

原因 2: 主キー未定義で AUTO_INCREMENT

-- ダメな例
CREATE TABLE users (
    id BIGINT AUTO_INCREMENT,
    name VARCHAR(100)
    -- ← PRIMARY KEY 宣言なし
);
-- ERROR

-- 修正
CREATE TABLE users (
    id BIGINT AUTO_INCREMENT,
    name VARCHAR(100),
    PRIMARY KEY (id)        -- ← 追加
);

-- またはインラインで
CREATE TABLE users (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100)
);

原因 3: 1 テーブルに複数 AUTO_INCREMENT

-- ダメな例
CREATE TABLE orders (
    id BIGINT AUTO_INCREMENT,
    order_no BIGINT AUTO_INCREMENT,  -- ← 2 つ目は不可
    PRIMARY KEY (id)
);
-- ERROR: Incorrect table definition; there can be only one auto column

-- AUTO_INCREMENT は 1 テーブルに 1 カラムだけ
-- 別の連番が欲しい場合は別の方法(トリガ / シーケンステーブル)

AUTO_INCREMENT が使える型

範囲用途
TINYINT-128〜127 / 0〜255小規模カウンタ(255 以下)
SMALLINT-32K〜32K / 0〜65K中小規模
MEDIUMINT16M / 16M中規模
INT21億 / 42億標準的
BIGINT9.2 京 / 18 京大規模・将来安全

推奨: BIGINT(将来オーバーフローしない)+ UNSIGNED(負の数不要なら範囲倍に)

CREATE TABLE users (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id)
);

UUID を使う場合

整数連番ではなく UUID を主キーにしたい場合は AUTO_INCREMENT は使えません:

-- 方法 1: アプリ側で UUID 生成(推奨)
CREATE TABLE users (
    id CHAR(36) NOT NULL,  -- UUID v4 形式 (32 hex + 4 hyphens)
    name VARCHAR(100),
    PRIMARY KEY (id)
);

-- Java
INSERT INTO users (id, name) VALUES (?, ?);
// id = UUID.randomUUID().toString();

-- 方法 2: MySQL 8 で DEFAULT (UUID())
CREATE TABLE users (
    id CHAR(36) NOT NULL DEFAULT (UUID()),
    name VARCHAR(100),
    PRIMARY KEY (id)
);
INSERT INTO users (name) VALUES (?);  -- id 自動セット

-- 方法 3: BINARY(16) で省スペース化
CREATE TABLE users (
    id BINARY(16) NOT NULL DEFAULT (UUID_TO_BIN(UUID())),
    name VARCHAR(100),
    PRIMARY KEY (id)
);
-- 取得時は BIN_TO_UUID(id) で文字列化

JPA エンティティとの対応

// AUTO_INCREMENT (BIGINT)
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

// UUID (CHAR(36))
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.UUID)  // Hibernate 6+
    @Column(columnDefinition = "CHAR(36)")
    private UUID id;
}

関連エラー

  • Multiple primary key defined: 主キーを複数指定(複合キーなら PRIMARY KEY (...) を 1 つに)
  • Table definition; there can be only one auto column: AUTO_INCREMENT が複数
  • Duplicate entry for key PRIMARY: AUTO_INCREMENT のリセットや手動 ID 指定で重複
  • BLOB/TEXT column ... used in key specification: TEXT に PRIMARY KEY を付けた

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 1071 Specified key was too long; max key length is 767 bytes
  2. ERROR 1063 (42000): Incorrect column specifier for column '~'
  3. mysqld: Can't change dir to '...\MySQL\MySQL Server X.X\data\' (OS errno 2 - No such file or directory)
  4. Install/Remove of the Service Denied!
  5. Datetime 型が NULL に見える
  6. Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
  7. ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  8. Exception: Wrong MySQL configuration
  9. [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
  10. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
  11. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  12. Incorrect column specifier for column 'カラム名'
  13. BLOB/TEXT column 'description' used in key specification without a key length
  14. ERROR: /bin/sh: mysql_config: コマンドが見つかりません
  15. Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
  16. CSVエクスポート時に「ERROR 1045 (28000): Access denied for user 'username'@'localhost'」エラーが表示される
  17. Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT
  18. 1
  19. 1
  20. 1)
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1"'`--
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1)
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1"'`--
  54. 1
  55. 1
  56. SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: ~