【问题标题】:CF10 , MYSQL SQL_SELECT_LIMIT=DEFAULTCF10,MYSQL SQL_SELECT_LIMIT=DEFAULT
【发布时间】:2013-02-23 07:39:08
【问题描述】:

我刚刚用mysql 5.6设置了CF10、win2008、IIS 7.5。但是我们收到了这个错误:

Error Executing Database Query.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT

当我为查询显式设置“LIMIT”时,此错误已消除。

(来自 cmets 的更新)

这是一个例子:

<cfquery name="dds" datasource ="#Request.Datasource#"> 
    SELECT * 
    FROM   tblaccounts 
    LIMIT 100 
</cfquery> 

据我的研究表明,它与新版本的mysql 5.6不兼容。

【问题讨论】:

  • PL 发布给您错误的查询
  • 如何在不查看查询的情况下找到错误所在? PL 发布所有查询
  • 好的,这里是一个例子,' SELECT * FROM tblaccounts LIMIT 100 ' 据我的研究显示与新版mysql 5.6不兼容。

标签: mysql coldfusion coldfusion-10


【解决方案1】:

从上面的答案中借用一些更详细的答案:

我们遇到了同样的问题,并通过更新 JDBC 文件解决了这个问题。由于ColdFusion 10 only supports MySQL 5.0 and 5.1,您需要更新如上所述的连接器。

要更新 Windows 机器上的 JDBC 连接器,

  1. the link provided above 获取 .zip 连接器
  2. 打开 zip 存档并找到 mysql-connector-java-5.1.23-bin.jar
  3. 将此 .jar 文件复制到 C:\ColdFusion10\cfusion\lib\
  4. 打开服务(开始 > 控制面板 [可选] > 管理工具 > 服务)
  5. 停止/启动“ColdFusion 10 应用服务器”服务

要验证新的 .jar 是否已被 ColdFusion 识别,请登录到您的 ColdFusion 管理员,单击“服务器设置”下的“设置摘要”。搜索“mysql”。您应该会看到“CF 服务器 Java 类路径”部分下列出的 .jar 文件。无需重新设置数据源。这些更改应该会自动应用。

【讨论】:

  • 很奇怪,我在这里发布问题之前尝试过这种方式,但它对我不起作用。在此更新之后,我的数据源无法识别等等,我恢复到旧的连接器,不得不重新安装 CF 来获取我的数据源。但我又试了一次,到目前为止效果很好。非常感谢您的帮助。
  • 第一个链接似乎已经更新,因为它提到现在支持 5.6。
【解决方案2】:

据我了解,另一个选项应该是将 JDBC 驱动程序更新为latest MySQL JDBC Driver。您可以在 using the latest JDBC driver here 上找到说明:(虽然说明可能有点旧,但它应该仍然以几乎相同的方式工作)。

仅供参考ColdFusion 10 only supports MySQL 5.0 and 5.1

【讨论】:

  • 更新jdbc驱动不会改变SET OPTION在mysql 5.6中无效的事实
  • 大家好,我确实更新了最新的驱动程序,但它导致了 CF 无法识别数据源的各种问题。 @pete 现在当我为我的查询设置“限制”时,它一切正常,你认为这是不好的做法吗?我们是否应该投资将我们的 mysql 降级到 5.1,PS 非常感谢 cf10 锁定指南,很棒的东西。
  • @ChrisBlackwell 他没有在他的代码中使用 SET OPTION,它是由 JDBC 驱动程序在内部完成的
  • @indian369 我认为您不会想对所有查询添加限制,因为 Adob​​e 尚不支持 MySQL 5.6 我将移至支持的 5.1 - 可能还有其他问题被发现。
  • 仅供参考 - 我就此联系了 Adob​​e 的一些人,他们要求我为它记录一个错误,因此它已被记录为错误 #3506758 bugbase.adobe.com/index.cfm?event=bug&id=3506758 如果您遇到此问题,请投票支持错误并添加任何可能对 CF 工程团队有帮助的 cmets。
【解决方案3】:

非常感谢 Clark - 我们刚刚遇到了与 CF9 相同的问题

这实际上也适用于 CF9。 然后第 3 步:将此 .jar 文件复制到 C:\ColdFusion9\lib\ Step3a 重命名旧驱动mysql-connector-java-commercial-5.1.11-bin.jar.old 否则驱动程序可能会发生冲突。 (以前发生过)

更新后,错误似乎消失了。 :)

【讨论】:

    【解决方案4】:

    ColdFusion 10 update 11 现已支持 MySQL 5.6,详情请点击此处:http://helpx.adobe.com/coldfusion/kb/coldfusion-10-update-11.html

    【讨论】:

      【解决方案5】:

      MySQL 很久以前就弃用了SET OPTION,参见docs,并在 5.6 中删除 您需要使用不带 OPTION 语句的 SET,

      SET SQL_SELECT_LIMIT = 100;

      会做你想做的。

      请注意,这会为单个连接设置默认值。为确保您的后续查询使用相同的连接,请将它们包装在 &lt;cftransaction&gt;

      <cftransaction>
        <cfquery name="tmp" datasource ="#Request.Datasource#"> 
        SET SQL_SELECT_LIMIT = 100;
        </cfquery> 
        <cfquery name="dds" datasource ="#Request.Datasource#"> 
        SELECT * 
        FROM tblaccounts;
        </cfquery> 
      </cftransaction>
      

      另一种方法是为数据源启用多个查询,但出于安全原因不建议这样做。

      【讨论】:

      • 我建议改用标准的limit 运算符。 sql_select_limit 是会话级别设置。应用它后,它会在数据库连接的整个生命周期内持续存在。因此,如果启用了连接池,则很有可能会重用连接并将限制应用于完全不相关的查询。使用标准的LIMIT 运算符会更安全,因为它只适用于单个查询。也就是说,我不相信他们明确使用set option ...。诚然,最初的问题在这一点上并不清楚 - 一种或另一种方式。
      • 奇怪的是,即使该选项在 5.0 中已经弃用,它仍然在 MySQL Java 连接器 5.1 (5.1.12) 中使用。无论如何,最新的连接器 (5.1.24) 已修复为不使用 SET OPTION。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2012-09-03
      • 2012-08-15
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多