【问题标题】:What is the limit (in terms of bytes / number of args) to the FIELD() function in MySQL?MySQL 中 FIELD() 函数的限制(以字节数/参数数计)是多少?
【发布时间】:2019-02-05 23:26:34
【问题描述】:

我正在考虑使用https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_field,但它没有说明它可以支持多少值的任何限制。

有人对此有任何见解吗?谢谢!

【问题讨论】:

  • 我的一般直觉是,当 MySQL 的文档中省略了类似的东西时,从多年的引用来看,它通常意味着“足够大,你不应该问”和“如果你必须问,您可能不应该将它用于您所要求的任何内容”。 有点像 CASE 表达式中的 WHEN-THEN 数量的限制没有明确说明。
  • 我建议正确规范化表格或存储 json duckduckgo.com/?q=mysql+json&atb=v110-5_b&ia=web

标签: mysql limit mysql-5.7 mysql-8.0 string-function


【解决方案1】:

我不知道每个语法对 FIELD() 函数的参数数量有任何限制。我假设它受到 SQL 查询的最大长度的限制。

任何 SQL 查询的长度限制由 max_allowed_packet 确定,以字节为单位。 MySQL 5.7 中这个变量的默认值是 4MB。它可以增加到 1GB。 https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_allowed_packet

我同意@Uueerdo 的观点——如果您要生成一个超过 4MB 的表达式列表,您真的应该质疑您的任务方法是否是解决它的最佳方法。

我猜 FIELD() 函数将以线性方式比较参数,因为实现可能从未猜到有人会提供很长的列表。因此,为每一行搜索 数万 个参数可能会成为性能瓶颈。

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 2019-12-10
    • 2012-09-13
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多