diff --git a/database_migrate/db_migrate.py b/database_migrate/db_migrate.py index e87e973..2c4e616 100644 --- a/database_migrate/db_migrate.py +++ b/database_migrate/db_migrate.py @@ -6,6 +6,7 @@ import argparse from concurrent.futures import ThreadPoolExecutor, as_completed from typing import List import logging +import re # 默认配置文件路径 DEFAULT_CONFIG_PATH = "config.yaml" @@ -111,13 +112,26 @@ class DBMigrator: with source_db.cursor() as source_cursor, target_db.cursor() as target_cursor: source_cursor.execute(f"SHOW CREATE TABLE {table};") create_table_sql = source_cursor.fetchone()[1] - target_cursor.execute(create_table_sql) + + # 检查并修正BIT(1)类型字段的默认值表示 + corrected_sql = self.correct_bit_default_value(create_table_sql) + + target_cursor.execute(corrected_sql) target_db.commit() return True except Exception as e: logging.error(f"Error copying table structure for {table}: {e}") return False + def correct_bit_default_value(self, sql): + """ + 检查并修正BIT(1)类型字段的默认值表示。 + 将错误的表示('0'/'1')转换为正确的二进制表示(b'0'/b'1')。 + """ + # 使用正则表达式匹配并修正BIT(1)类型字段的默认值表示 + corrected_sql = re.sub(r"BIT$1$( NOT NULL)? DEFAULT '([01])'", r"BIT(1)\1 DEFAULT b'\2'", sql) + return corrected_sql + def migrate_table_data(self, table): # 为每个表迁移数据 try: