mysql - 在 Ruby on Rails (MySQL) 中使用 'end' 作为列名

标签 mysql ruby-on-rails postgresql activerecord heroku

我有一个带有“结束”列(日期时间格式)的模型,只是发现每当我尝试在查询中引用该列时,Heroku 就会崩溃并出现不合逻辑的 Active Record 错误。我花了两个小时尝试调试这个极其简单的查询,之后我将该列重命名为“end_at”,所有问题都消失了。

有其他人遇到过这个问题吗?我很好奇这背后的原因,希望我们能帮助其他人避免同样的错误。有人问过类似的问题before , 但没有给出明确的答案。

最佳答案

BEGIN 和END 是Oracle 和SQL Server 中的保留字,但不知道为什么MySQL doesn't consider them as such .

然而,PGError 似乎表明数据库引擎本身(而不是任何与 Ruby 相关的运行时)确实因为“结束”而拒绝了查询。

保留字(和包含空格的名称)可以在引用时使用——也许 Active Record 没有在生成的 SQL 中引用标识符。

我会查看 MySQL 中的日志 (http://dev.mysql.com/doc/refman/5.5/en/query-log.html) 并查看生成的语句。

并且由于 PGError 表示 PostGreSQL 而您提到了 Heroku (PostgreSQL 8.3) - 我认为这是因为 END 确实是 PostgreSQL 中的保留字:http://www.postgresql.org/docs/8.3/static/sql-keywords-appendix.html

http://www.petefreitag.com/tools/sql_reserved_words_checker/?word=end

关于mysql - 在 Ruby on Rails (MySQL) 中使用 'end' 作为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5570783/

相关文章:

sql - 如何使用 JOIN 将列从一个表复制到另一个表

mysql - 如何检查特定数据库的 MySQL 引擎类型?

ruby-on-rails - Rails、CoffeeScript 和 ERB

ruby-on-rails - 如何在 Windows 7 上的 Rails 3 应用程序中使用 "mysql2"gem?

ruby-on-rails - 使用按钮向 Rails 表添加新行

java - 无法持久保存分离的对象

java - 想要在我的数据库中存储 utc 时间,并在 UI 级别存储特定于时区的时间戳

php - 根据主键(Mysql)从两个表中选择一行?

php - Zend 中的查询联合不同

mysql - 从同一字段但在不同的两行中选择数据,然后输出到一行