在執行建立臨時表、加索引等操作時,MySQL 錯誤日誌反覆出現:
[Warning] Invalid (old?) table or database name
經過原始碼追蹤,警告觸發位置位於 sql_table.cc:279 的 explain_filename 函數,而該函數僅在 ha_innodb.cc:1946 的 innobase_convert_identifier 中被呼叫。該函數負責將 SQL 識別碼(表名、資料庫名)轉換為 MySQL 系統字符集(UTF-8)並按需加引號。
ha_innodb.cc:2034 → innobase_convert_name → innobase_convert_identifierlatin1,而 InnoDB 內部預期 UTF-8,字符集轉換過程可能觸發警告。utf8(或 utf8mb4),觀察警告是否消失。ha_innodb.cc:6269 create_table_def → row_create_table_for_mysql 返回 DB_DUPLICATE_KEY → 呼叫 innobase_convert_identifierutf8mb4,重啟服務觀察。SHOW ENGINE INNODB STATUS 進一步分析線索二。utf8mb4,避免隱式轉換帶來的效能損耗與潛在 Bug。此警告多與字符集轉換或 DDL 異常分支有關。雖不直接影響業務,但暗示潛在的字符集配置不一致。建議從字符集統一入手,若無效再深入核心代碼邏輯。