在 Ruby on Rails (MySQL) 中使用“end”作为列名称

2023-12-30

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

还有其他人遇到过这个问题吗?我很好奇这背后的原因,并希望我们可以帮助其他人避免同样的错误。类似的问题已被问到before https://stackoverflow.com/questions/3259020/using-end-as-column-name,但没有给出明确的答案。


BEGIN和END是Oracle和SQL Server中的保留字,但不知道为什么MySQL不认为它们是这样的 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html.

然而,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.postgresql.org/docs/8.3/static/sql-keywords-appendix.html

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ruby on Rails (MySQL) 中使用“end”作为列名称 的相关文章

随机推荐