Mysql

表列長度在 MySQL 5.5 和 5.6 中很好,但升級到 5.7 會導致列太多

  • June 30, 2020

所以我有一個從 MySQL 5.5 -> 5.7 升級的 CMS。一張表有 1000 多列,但在 5.5 和 5.6 中執行良好。達到 5.7 時,涉及此表的查詢會導致1117錯誤。(數據庫中的所有表都是MyISAM)。

它在 MySQL 5.5 中執行良好(相關的 CMS 執行良好)。我升級到 MySQL 5.6,一切正常。

然後當我升級到 MySQL 5.7(.23) 時,我得到一個關於太多列的錯誤,即使刪除了 20 多列,我仍然得到這個錯誤。

有什麼可以改變的?我按順序升級(首先是 5.5 -> 5.6,經過測試,然後是 5.6 -> 5.7)

有沒有可能是我缺少的設置?for 5.7是否會mysql_upgrade以某種方式更改列並通過添加導致每列佔用更多數據的額外元數據來破壞它們的限制?我知道列限制是理論上的,但我不知道為什麼它在前兩個版本中有效,而不是在 5.7 中有效。

有什麼想法嗎?

編輯

刪除約 300 列後,錯誤停止。但這是一個表演障礙,我真的很想知道為什麼 5.7 不能處理 5.5 和 5.6 可以處理的問題,以及是否是配置問題或其他問題。謝謝你的幫助。

一個猜測……看看你得到了什麼

SHOW VARIABLES LIKE '%engine%';

這可能表明您並沒有真正在任何地方使用 MyISAM。

未來,MyISAM 很可能會消失。所以,開始思考如何處理InnoDB。

TINYTEXT或許總是比合適的差VARCHAR

單個表中超過一百列通常是糟糕的架構設計。想想你的桌子如何在邏輯上被分解。

不要跨列展開數組。

由於“列太多”錯誤,我無法執行查詢,因為它帶來了很多列,我將變數更改internal_tmp_disk_storage_engine為 MyISAM 並且它已修復。

引用自:https://dba.stackexchange.com/questions/221054