type
status
date
slug
summary
tags
category
icon
password

狀況

在使用 Prepare 語句進行 DML 時,遇到了以下錯誤:

原因

查看了 MySQL 文檔並沒在這部分特別說明限制多少數量,之後在源碼 sql/sql_prepare.cc 中找到答案,相關代碼如下:
可以看到當 param_count > (uint)UINT_MAX16 也就是 2^16 - 1 = 65535 個參數就會引發此錯誤。

後續

INSERT 語句在這部分比較容易達到上限,因為當有 M 個欄位 N 筆資料要 INSERT,則 M*N 不能大於 65535,若超過則需要分組拆開 INSERT。
關於此數量限制目前以有人在 MySQL 8.0.22 提出 Feature request ,因此未來也許會加大這個限制或者是提供變數調整。

參考