我有一个带有“结束”列(日期时间格式)的模型,只是发现每当我尝试在查询中引用该列时,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/