铁路及;MySQL:SELECT语句单引号与双引号

铁路及;MySQL:SELECT语句单引号与双引号,mysql,ruby-on-rails,quotes,Mysql,Ruby On Rails,Quotes,我有一个CRON作业,它执行SELECT语句来获取记录。当SELECT在my dev计算机上运行时,它会生成以下语句: SELECT `users`.* FROM `users` WHERE `users`.`id` = 87 LIMIT 1 这是成功的 当SELECT在我的生产(托管)计算机上运行时,它会生成带有双引号的语句: SELECT "users".* FROM "users" WHERE "users”.”id” = 87 LIMIT 1 这不成功,我得到一个MySQL 10

我有一个CRON作业,它执行SELECT语句来获取记录。当SELECT在my dev计算机上运行时,它会生成以下语句:

SELECT `users`.* FROM `users` WHERE `users`.`id` = 87 LIMIT 1  
这是成功的

当SELECT在我的生产(托管)计算机上运行时,它会生成带有双引号的语句:

SELECT "users".* FROM "users" WHERE "users”.”id” = 87 LIMIT 1
这不成功,我得到一个MySQL 1064错误

#1064 - 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 '.* FROM "users" WHERE "users
这两台机器上的代码都是相同的,但我的dev MySQL版本是5.5.33,而production版本是5.1.67(我无法控制设置/更新它)

有没有办法强制使用单引号或其他首选方法来处理这种情况

谢谢你的时间和帮助

--编辑--

以下是通过我的CRON作业调用的主要代码段:

/lib/tasks/reports.rake

namespace :report do
  desc "Send Daily Report"
  task :daily => :environment do
    User.where(:report_daily => 1).find_each do |user|
      ReportsMailer.send_report(user, 'daily').deliver
    end
  end
/app/mailers/reports\u mailer.rb

def send_report(user, date_increment)
   @user = user
   @date_increment = date_increment
   get_times(user)
   mail :to => user.email, :subject=> "Report: #{@dates}"
 end
--EDIT2--

所以看起来我需要使用倾斜单引号(`),这样才能成功地工作。如何强制我的应用程序或MySQL使用这些,而不是双引号?

我不知道为什么它会这样做,但我知道如果在MySQL中引用列名,则需要使用“`”,而值/数据应该用“”包装,如下所示:

SELECT `users`.* FROM `users` WHERE `users`.`id` = "87" LIMIT 1 
早在我学习如何进行简单的MYSQL查询的时候,我就很辛苦地学会了这一点

这里有一些来自的文档供您参考:

标识符引号字符是反勾号(“`”):

标识符引号字符可以包含在标识符中,如果 您可以引用标识符。如果要包含在 标识符与用于引用标识符本身的标识符相同, 然后需要将字符加倍 一个名为a`b的表,其中包含一个名为c“d”的列:


有什么原因不能将某些sql语句直接放入代码中,如:

User.where("`report_daily`=1").find_each do |user|

经过进一步检查,并与我的托管公司合作,结果表明我的查询在他们的服务器上超时。感谢所有响应。

因为您没有使用任何文本,所以生成的SQL语句的格式应该由底层适配器确定。也许您在每台机器上安装或配置了不同的mysql适配器。检查已安装的版本。例如:

bundle show mysql
adapter: mysql
并在database.yml中检查项目的适配器配置。例如:

bundle show mysql
adapter: mysql

比较每台机器之间的这些检查结果,可以知道您是否在这两台机器上使用了不同的适配器。

您使用什么方法来运行此查询?您是否尝试过降级您的dev-MySQL版本,以确认这种情况在本地也会发生?我已经在上面的编辑中添加了方法片段。谢谢我没有尝试降级,但将尝试。请查看编辑2。谢谢您需要向我们展示构造SQL的代码。此外,您如何确定在每台计算机上执行的SQL(例如,从数据库中执行)?如果您是在猜测,那么值得注意的是,正如“如果启用了SQL模式,还允许在双引号内引用标识符”中所述。