MySQL大小写敏感性趣事

发布者    |       Seam

因此,我在本地机器上为这个网站准备数据。我的预发布环境几乎相同(相同的Java VM,JBoss AS,MySQL版本等)。唯一的区别是操作系统,它是OS X,而实际网站运行在CentOS上。我创建了一个包以部署,一切看起来都很正常。直到我编辑了实际网站上的文档。MySQL开始抛出在预发布环境中未显示的约束违规错误。

现在,我花了大约半小时才意识到发生了什么,我希望这能节省某人的时间

  • MySQL关于数据库目录中的标识符是否大小写敏感。
  • 这取决于它运行的操作系统,这显然没有意义,但你会在某个时候学到这一点。例如,在SQL查询中或在外键约束声明(references FOO...

)中指定的表名必须使用正确的格式,如果你在Linux上运行MySQL,但如果你在OS X上运行它,则不需要。mysqldump工具,我使用它从预发布数据库导出用于部署的包,在导出的文件中生成所有约束声明都是小写的references 'foo'.

如果你认为MySQL会在导入时捕获这个工具的常规错误,那么这通常会被认为是一个错误。但不是,它默默地忽略了这些显然非法的约束声明(因为目标表找不到),仍然导入它们,然后在运行时因约束违规而失败。很好,对吧?


返回顶部