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

时间:2011-02-07 14:22:01

标签: 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'

这给了我更好的搜索功能!

4 个答案:

答案 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。