我可以在MySQL 5的查询中使用绑定变量的数量有限制吗?我认为有,但我在参考手册或谷歌搜索中找不到任何信息。
我能找到的唯一提供任何信息的内容都在C API参考中:http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-bind-result.html
这似乎意味着记忆是唯一的限制,但这似乎有点可疑。
更新:有限制!
runner.rb:47: data_replicator.rb:312:in `prepare': Prepared statement contains too many placeholders (Mysql::Error)
from data_replicator.rb:312:in `set_statement_handle_for'
from data_replicator.rb:287:in `log_query'
from data_replicator.rb:221:in `replicate_table'
from data_replicator.rb:93:in `replicate'
from data_replicator.rb:20:in `run'
这给了我更好的搜索功能!
答案 0 :(得分:10)
预准备语句中值的最大占位符数是16位无符号整数的最大值,或者是指定值:65,536。
这可以在MySQL代码中看到: SQL / sql_prepare.cc:
static bool init_param_array(Prepared_statement *stmt)
{
LEX *lex= stmt->lex;
if ((stmt->param_count= lex->param_list.elements))
{
if (stmt->param_count > (uint) UINT_MAX16)
{
/* Error code to be defined in 5.0 */
my_message(ER_PS_MANY_PARAM, ER(ER_PS_MANY_PARAM), MYF(0));
return TRUE;
}
答案 1 :(得分:1)
在 MariaDB 5.5 中, 65,535 (2 ^ 16-1)占位符有限制,应该与具有相同的行为> MySQL 5.5 。
不确定是否相关,我使用MySQLi / MySQLND在PHP 5.5.12上进行了测试。
答案 2 :(得分:0)
MariaDB documentation表示默认限制为16.382。并且根据版本,硬限制为4.294.967.295(> = MariaDB 10.3.6)或1.048.576(<= MariaDB 10.3.5)。
答案 3 :(得分:-4)
来自http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html:
防范太多准备 正在创建的语句 同时,设置 max_prepared_stmt_count系统 变量
根据max_prepared_stmt_count文档,默认值为16_382,允许范围为0(完全禁用预准备语句),为1_000_000。