我可以在MySQL 5的SQL查询中使用多少绑定变量?

Jos*_*ver 6 mysql

我在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'
Run Code Online (Sandbox Code Playgroud)

这给了我一些更好的搜索!

Tre*_*oyd 11

预准备语句中值的最大占位符数是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;
    }
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 7

MariaDB 5.5中的占位符限制为65,535 (2^16-1) 个,它应该与MySQL 5.5具有相同的行为。

不确定是否相关,我使用 MySQLi / MySQLND 在 PHP 5.5.12 上测试了它。


Jos*_*ver -5

来自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。

  • 这是准备好的语句的数量,而不是绑定变量的数量。 (6认同)