我有两个要保持同步的mysql数据库。当我跑步时
show create trigger tr_del_EmailHash;
从本地网页的mysqli连接中,我从每个数据库中得到的输出都略有不同,因为它以单引号返回触发器名称,如下所示:
CREATE trigger `tr_del_EmailHash` before DELETE
...
,另一个返回触发器名称,没有这样的引号:
CREATE trigger tr_del_EmailHash before DELETE
...
由于我试图将它们存储在源代码控制中并能够跨平台进行模式差异,因此这种差异是非常不可取的。 mysqld.cnf文件和mysql服务器变量在每台服务器上都是相同的,所以我不知所措,该在哪里寻找控制“显示创建触发器”查询是否引用触发器名称的控件。谁能提供一些有关我应该看的地方或可以在哪里进行调整的有用建议?
答案 0 :(得分:1)
show create
语句的引用行为由sql_quote_show_create
配置设置控制:
如果启用(默认),则服务器引用SHOW CREATE TABLE和SHOW CREATE DATABASE语句的标识符。如果禁用,则引用被禁用。默认情况下启用此选项,以便复制适用于需要引用的标识符。
特别是对于触发器,不幸的是,这仅适用于MySQL 8,并且仅适用于触发器和表名,不适用于触发器主体。较早的版本会在您输入名称时引用名称(可能在您的控制下,尤其是涉及到主体)。但是,如果您混合使用MySQL 8和早期版本(其中一些修改了代码,而其他却没有修改代码),则可能会造成麻烦,因此您可能必须确定一个一致的命名架构并相应地调整该设置。