LoginSignup
2

More than 5 years have passed since last update.

IntelliJ の Database Tools の不具合について

Last updated at Posted at 2013-12-15

IntelliJ には Database Tools があり、テーブルの閲覧や操作ができ、大変便利です。
私がこの Database Tools を使っていて最近見つけた不具合らしきものを共有します。

利用DBはMySQLです。AWSのRDSのMySQLを使っています。
MySQL のバージョンは 5.5.20 です。

サンプルとして以下のようなテーブルを作成してみました。さまざまな型を含むテーブルとなります。

DDL
CREATE TABLE type_test (
    ID INT unsigned NOT NULL AUTO_INCREMENT,
    A1 TINYINT,
    A2 SMALLINT,
    A3 MEDIUMINT,
    A4 INT,
    A5 BIGINT,
    A6 FLOAT,
    A7 REAL,
    A8 DOUBLE PRECISION,
    B1 DATETIME,
    B2 DATE,
    B3 TIMESTAMP,
    B4 TIME,
    B5 YEAR,
    C1 CHAR(1),
    C2 VARCHAR(1),
    D1 BINARY,
    D2 VARBINARY(1),
    E1 TINYBLOB,
    E2 BLOB,
    E3 MEDIUMBLOB,
    E4 LONGBLOB,
    F1 TINYTEXT,
    F2 TEXT,
    F3 MEDIUMTEXT,
    F4 LONGTEXT,
    G1 ENUM('1', '2'),
    H1 SET('one', 'two'),
    PRIMARY KEY (ID)
) ENGINE=InnoDB

Database Tools ではテーブルのツリービューからテーブルを右クリック選択して表示されるコンテキストメニューにCopy DDL という項目があります。その名のとおりDDLをクリップボードにコピーしてくれる機能です。

a1.png

実際に上記DDLでつくったテーブルを選択し、Copy DDL 実行後に貼り付けてみると、上記のDDLと比べて 型が正確でないケースがあることがわかります(コメントの部分です)。

コピーされたDDL
CREATE TABLE type_test
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    A1 TINYINT,
    A2 SMALLINT,
    A3 MEDIUMINT,
    A4 INT,
    A5 BIGINT,
    A6 REAL,     -- 本当は FLOAT型
    A7 DOUBLE,  -- ここは問題ないっぽい(REALとDOUBLEは同義)
    A8 DOUBLE,
    B1 DATETIME,
    B2 DATE,
    B3 TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    B4 TIME,
    B5 DATE,    -- 本当は YEAR型
    C1 CHAR(1),
    C2 VARCHAR(1),
    D1 BINARY(1),
    D2 VARBINARY(1),
    E1 TINYBLOB,
    E2 LONGBLOB, -- 本当は BLOB型
    E3 MEDIUMBLOB,
    E4 LONGBLOB,
    F1 VARCHAR(255), -- 本当は TINYTEXT型
    F2 LONGTEXT,     -- 本当は TEXT型
    F3 LONGTEXT,     -- 本当は MEDIUMTEXT 型
    F4 LONGTEXT,
    G1 CHAR(2),      -- 本当は ENUM 型
    H1 CHAR(7)       -- 本当は SET 型
);

tinytext は格納できるサイズが 255 byte なので、まあ同じようなものに見えますが、varchartext ではマルチバイトの扱いに差があるようです。(詳しくは http://ngyuki.hatenablog.com/entry/20110804/p1)

textblob のように 格納できるデータのサイズが大幅に異なる ような型に対して誤表示があるため注意が必要です。

こちらの表示も同様ですね。

a2.png

この不具合が修正されるまでは、面倒ですが、

show create table table_name

というクエリを発行し、データ型を確認するのがよいと思います。型を見ずにカラム名だけを確認する場合はCopy DDLを使ってもよいと思います。

この不具合を確認した IntelliJ のバージョンは 12.1.6 ですが、最新の 13 でも同様の現象が発生するようです。

みなさんも注意しましょう。
そしてもし関係者の方がご覧になっていたら、修正をお願いします。

追記

本家にちゃんとバグレポートをしろとお叱りをいただきましたので、レポートいたしました。
http://youtrack.jetbrains.com/issue/IDEA-118246

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2