Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした