每个数据库提供程序类型的最大允许参数数是多少?

Bit*_*der 18 mysql sql-server sqlite oracle postgresql

有2,100个参数的限制可以传递给Sql Server查询,即通过ADO.Net,但.Net开发人员使用的其他常用数据库的记录限制是什么 - 特别是我对以下内容感兴趣:

  • Oracle 10g/11g
  • MySQL的
  • PostgreSQL的
  • 源码

有人知道吗?

chi*_*ien 22

甲骨文:64,000.资源

MySQL的:

  • 默认情况下,没有限制.MySQL"文本协议"要求.NET客户端库在将命令文本发送到服务器之前替换所有参数; 没有可以强制执行的服务器端限制,并且客户端没有限制(可用内存除外).
  • 如果通过调用MySqlCommand.Prepare()(并IgnorePrepare=false在连接字符串中指定)使用"预准备语句" ,则限制为65,535个参数(因为num_params必须适合两个字节).

PostgreSql:编辑:34464用于查询,100用于函数,按照Magnus Hagander的答案(这里复制答案以提供单一参考点)

SqlLite:999(SQLITE_MAX_VARIABLE_NUMBER,默认为999,但可以在运行时降低) - 对于函数,默认值为100个参数.请参见运行时限制文档部分9

  • 我使用[官方ADO.NET连接器](http://www.mysql.com/downloads/connector/net/)成功地将100,000个参数添加到`MySqlCommand`,因此限制大于65,536.请注意,`MySqlCommand.Parameters.Add`方法使用O(n)算法(自v6.5.4起),因此添加100,000个参数确实需要将近两分钟(添加_n_参数总体上为O(n ^ 2)). (2认同)

Sta*_*cev 7

PostgreSQL 有线协议使用 16 位整数来计算绑定消息中的参数数量 ( https://www.postgresql.org/docs/current/protocol-message-formats.html )。

因此,PostgreSQL 协议不允许单个语句使用超过 65535 个参数。也就是说,可以发送带有两个语句的单个 ado.net 命令,每个语句有 65535 个参数。


Mag*_*der 6

在讨论查询的绑定参数时,PostgreSQL的正确答案似乎是34464.响应100对于函数的参数数量仍然是正确的.

  • 使用postgresql 9.6.3,我可以使用65535个参数进行单个插入而不会出现问题。65536+参数失败。 (2认同)

Luk*_*der 5

在jOOQ中,一旦达到每个供应商的相关数量,我们便通过内联绑定值来解决这些限制。这些数字记录在这里。根据供应商的文档,并非所有数字都一定是正确的数字,我们已经通过JDBC反复试验经验地发现了它们。它们是(不将它们绑定到特定版本):

  • 英格里斯:1024
  • Microsoft Access:768
  • 甲骨文:32767
  • PostgreSQL的:32767
  • SQLite的:999
  • SQL Server:2100(取决于版本)
  • Sybase ASE:2000

其他数据库似乎没有任何限制-至少我们还没有发现它们(不过看起来还远没有超过100000)。

  • @MichaelPiefel:这是一个完全不同的限制,即`IN`列表中的元素数量,jOOQ也通过使用`OR`谓词拆分`IN`列表来处理。此限制与是否使用绑定变量无关。 (2认同)