我在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)
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。