Skip to content

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

@clappers-yokoyama

Description

@clappers-yokoyama

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時に改行をして管理を行いため
修正の程よろしくお願いいたします。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions