From b70d13457655265df836595714356b72a9a43944 Mon Sep 17 00:00:00 2001 From: dreamer Date: Tue, 24 Mar 2026 21:31:44 +0900 Subject: [PATCH 1/3] Update 2023_09_04_153112_add_full_text_search_to_databases.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: MariaDBバージョン文字列のパースバグ修正 --- ..._153112_add_full_text_search_to_databases.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php b/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php index 2ec2ecd67..ccde2f60f 100644 --- a/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php +++ b/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php @@ -24,14 +24,21 @@ public function up() // Laravel10対応(Laravel8でも動作) $result = DB::select("select version() as version"); - $version = $result[0]->version; + $version = $result[0]->version; + // MariaDBはNGRAMが使えない if (strpos($version, 'Maria') !== false) { // MariaDB - $version = str_replace('-MariaDB', '', $version); - $version_arr = explode('.', $version); + // バージョン文字列から余分なサフィックスを除去(例: "10.5.19-MariaDB-log" → "10.5.19") + // str_replace('-MariaDB', '', ...) だけでは "-log" 等のサフィックスが残り + // explode後の $version_arr[1] が "19-log" のような文字列になってしまい + // $version_arr[1] >= 6 の比較が正しく動作しないバグを修正 + preg_match('/^(\d+)\.(\d+)\.(\d+)/', $version, $matches); + $major = isset($matches[1]) ? (int)$matches[1] : 0; + $minor = isset($matches[2]) ? (int)$matches[2] : 0; + // MariaDBは5.6以上でFULLTEXT対応 - if ($version_arr[0] >= 5 && $version_arr[1] >= 6) { + if ($major > 5 || ($major === 5 && $minor >= 6)) { DB::statement('ALTER TABLE databases_inputs ADD FULLTEXT INDEX ft_idx_databases_inputs_full_text (full_text);'); } } else { @@ -54,6 +61,5 @@ public function down() $table->dropIndex('ft_idx_databases_inputs_full_text'); $table->dropColumn('full_text'); }); - } } From b7e8713ef3fc7b69015f5f9324aad6983352642d Mon Sep 17 00:00:00 2001 From: dreamer Date: Wed, 25 Mar 2026 18:22:07 +0900 Subject: [PATCH 2/3] Update 2023_09_04_153112_add_full_text_search_to_databases.php --- ..._153112_add_full_text_search_to_databases.php | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php b/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php index ccde2f60f..2ec2ecd67 100644 --- a/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php +++ b/database/migrations/2023_09_04_153112_add_full_text_search_to_databases.php @@ -24,21 +24,14 @@ public function up() // Laravel10対応(Laravel8でも動作) $result = DB::select("select version() as version"); - $version = $result[0]->version; - + $version = $result[0]->version; // MariaDBはNGRAMが使えない if (strpos($version, 'Maria') !== false) { // MariaDB - // バージョン文字列から余分なサフィックスを除去(例: "10.5.19-MariaDB-log" → "10.5.19") - // str_replace('-MariaDB', '', ...) だけでは "-log" 等のサフィックスが残り - // explode後の $version_arr[1] が "19-log" のような文字列になってしまい - // $version_arr[1] >= 6 の比較が正しく動作しないバグを修正 - preg_match('/^(\d+)\.(\d+)\.(\d+)/', $version, $matches); - $major = isset($matches[1]) ? (int)$matches[1] : 0; - $minor = isset($matches[2]) ? (int)$matches[2] : 0; - + $version = str_replace('-MariaDB', '', $version); + $version_arr = explode('.', $version); // MariaDBは5.6以上でFULLTEXT対応 - if ($major > 5 || ($major === 5 && $minor >= 6)) { + if ($version_arr[0] >= 5 && $version_arr[1] >= 6) { DB::statement('ALTER TABLE databases_inputs ADD FULLTEXT INDEX ft_idx_databases_inputs_full_text (full_text);'); } } else { @@ -61,5 +54,6 @@ public function down() $table->dropIndex('ft_idx_databases_inputs_full_text'); $table->dropColumn('full_text'); }); + } } From c911a366fd221e3bfe9a191d585dfcd3d46704ca Mon Sep 17 00:00:00 2001 From: dreamer Date: Wed, 25 Mar 2026 18:42:25 +0900 Subject: [PATCH 3/3] Create 2026_03_25_000000_fix_mariadb_fulltext_index_on_databases_inputs.php --- ...adb_fulltext_index_on_databases_inputs.php | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 database/migrations/2026_03_25_000000_fix_mariadb_fulltext_index_on_databases_inputs.php diff --git a/database/migrations/2026_03_25_000000_fix_mariadb_fulltext_index_on_databases_inputs.php b/database/migrations/2026_03_25_000000_fix_mariadb_fulltext_index_on_databases_inputs.php new file mode 100644 index 000000000..b4c8976a3 --- /dev/null +++ b/database/migrations/2026_03_25_000000_fix_mariadb_fulltext_index_on_databases_inputs.php @@ -0,0 +1,67 @@ +version; + + // MariaDB以外はスキップ(MySQL環境では元のマイグレーションが正常動作しているため) + if (strpos($version, 'Maria') === false) { + return; + } + + // FULLTEXTインデックスが既に存在する場合はスキップ + $indexes = DB::select(" + SHOW INDEX FROM databases_inputs + WHERE Key_name = 'ft_idx_databases_inputs_full_text' + "); + if (!empty($indexes)) { + return; + } + + // バージョン文字列から数字部分のみ抽出("-log"等のサフィックスを除外するため preg_match を使用) + if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/', $version, $matches)) { + // パース失敗は異常ケースのためログに記録 + Log::warning('FixMariadbFulltextIndexOnDatabasesInputs: MariaDBバージョン文字列のパース失敗。', [ + 'version' => $version, + ]); + return; + } + + $major = (int)$matches[1]; + $minor = (int)$matches[2]; + + // MariaDBは5.6以上でFULLTEXT対応(NGRAMは使えないためパーサー指定なし) + if ($major > 5 || ($major === 5 && $minor >= 6)) { + DB::statement('ALTER TABLE databases_inputs ADD FULLTEXT INDEX ft_idx_databases_inputs_full_text (full_text);'); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // インデックスが存在する場合のみ削除 + $indexes = DB::select(" + SHOW INDEX FROM databases_inputs + WHERE Key_name = 'ft_idx_databases_inputs_full_text' + "); + if (!empty($indexes)) { + DB::statement('ALTER TABLE databases_inputs DROP INDEX ft_idx_databases_inputs_full_text;'); + } + } +}