migrations icon indicating copy to clipboard operation
migrations copied to clipboard

bulk insert文が複数行の時に実行エラー

Open clappers-yokoyama opened this issue 5 months ago • 4 comments

mybatis-migrations-3.3.11を使用して、localhostのmysql Ver 8.3.0 for Win64 on x86_64に対してsqlファイルを流した際 文字列内に半角セミコロン(;)があり、かつその後に改行されてsql文が続く場合に下記の実行エラーが発生します。

エラー内容:

ERROR: Error executing command.  Cause: java.lang.RuntimeException: Error executing: INSERT INTO `_text` (`id`, `japanese`, `english`, `datetime`)
	VALUES
		('A', 'a;A', 'a
.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''a' at line 3

_textテーブル定義は

CREATE TABLE IF NOT EXISTS _text (
	`id` VARCHAR(255) NOT NULL,
	`japanese` TEXT NOT NULL,
	`english` TEXT NOT NULL,
	`datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
	PRIMARY KEY (`id`) USING BTREE
);

となっており、このテーブルに対して以下のbulk insert文を投げる事でエラーが発生します。

SET @now = '2025-06-20 12:00:00';

INSERT INTO `_text` (`id`, `japanese`, `english`, `datetime`)
	VALUES
		('A', 'a;A', 'a;A', @now),
		('B', 'b;B', 'b;B', @now);

この時"japanese"と"english"カラムに入れる文字列をセミコロンのみ「('A', ';', ';', @now),」にしてもエラーが発生します。 ですが上記sqlを下記のように改行を削除する修正でエラーは発生せず正しく動作します。

SET @now = '2025-06-20 12:00:00';

INSERT INTO `_text` (`id`, `japanese`, `english`, `datetime`)
	VALUES
		('A', 'a;A', 'a;A', @now), ('B', 'b;B', 'b;B', @now);

このように回避方法はありますが、可読性の側面からもbulk insert時に改行をして管理を行いため 修正の程よろしくお願いいたします。

clappers-yokoyama avatar Jun 20 '25 08:06 clappers-yokoyama