0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mariadb/カラムのコメントは変更時に注意が必要です

Posted at

はじめに

MariaDBでカラムのコメントの使いづらさに気が付いた・・という話です。
環境は、WSL2:UbuntuのMariaDB10.9です。
HeidiSQLでテーブル・カラムの日本語名称を確認したいよねという話がきっかけで、コメントで管理しようと考えてやってみたところ、カラムの日本語名称変更=コメントの変更で、ちょっとした問題に気づきました。
その顛末を順を追って書いてみようと思います。

Create Table時はなんら問題ない

カラムのコメントが問題になるのは、変更の時だけです。
例えば、Create時にはこんな感じでコメントとして定義できますが、別に問題はありません。

CREATE TABLE `test` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`col1` VARCHAR(50) NULL DEFAULT 'テスト' COMMENT 'カラム日本語名称' COLLATE 'utf8mb4_unicode_ci',
	PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
COMMENT='テーブル日本語名称'
;

create tableでテーブルやカラムの日本語名称をコメントで設定するのは、ともに「COMMENT」を使って定義すればよいだけですからね。
以後、このテーブル・カラムを例に使います。

Alter Tableでテーブルコメント変更も問題ありません

テーブルの日本語名称の変更も同様です。

ALTER TABLE `test` COMMENT = '変更後日本語名称';

安全にテーブルコメントだけ変更できます。

カラムのコメント変更は要注意

さて、カラムのコメントです。
まず、何が問題なのかの実例をやってみます。
上記んも変更前の状態をまず確認します。

show full columns from test;

表示される内容は以下です。(余分なカラムは記載してません)

"Field"	"Type"	"Collation"	"Null"	"Key"	"Default"	"Extra"	"Privileges"	"Comment"
"col1"	"varchar(50)"	"utf8mb4_unicode_ci"	"YES"	""	"テスト"	""	"select,insert,update,references"	"カラム日本語名称"

ここでカラムのコメントを変更してみます。
どうもカラムの場合、テーブルのように「コメント」だけを変更する構文は用意されていないようなので、最低限の記述で以下のようになります。

ALTER TABLE test CHANGE COLUMN col1 col1 VARCHAR(50) NULL COMMENT '変更後カラム名称';

これで実行後に同じコマンドで情報を出力します。

"Field"	"Type"	"Collation"	"Null"	"Key"	"Default"	"Extra"	"Privileges"	"Comment"
"col1"	"varchar(50)"	"utf8mb4_general_ci"	"YES"	""	\N	""	"select,insert,update,references"	"変更後カラム名称"

わかりづらいとは思いますが、コメントの修正をしたことで「Default」の列に指定されていた「テスト」が消えて「\N」になっています。
なんと・・Alter文で指定していない箇所が意図せず消えてしまっています。
もちろん。

ALTER TABLE test CHANGE COLUMN col1 col1 VARCHAR(50) NULL DEFAULT 'テスト' COMMENT '変更後カラム名称';

のように、DEFAULTも指定して実行すれば大丈夫です。
でも、もれていたとしてもエラーにならず、サクッと消されてしまうので、意図せず「Default」に指定されていた値がクリアされているのに誰も気づかない・・なんててことが起こりえるわけです。
本番運用している環境だと、これはとても危険です。
万が一にも、カラムのコメント修正が原因でトラブルなどを発生させたら、お客からも会社からも糞みそに言われるのは間違いないですしね(笑)。

まとめ

上記が僕が気づいた「MariaDBでカラムのコメントの使いづらさ」です。
とりあえず、メリットよりもデメリット(リスク)が大きいので、カラムに初期セットした日本語名称は変更禁止で、新たな整備計画は白紙になりました。
これ・・あとで気づくと、じんわりダメージきついです。
ではでは。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?