【发布时间】:2017-07-31 14:46:31
【问题描述】:
我有一个最终用户请求我启用NO_BACKSLASH_ESCAPES 服务器 SQL 模式。他实际上只能访问一个数据库。我是否只能对他的特定数据库启用此选项?如果不是,而且是全球性的,会有什么样的影响?由于它禁用了反斜杠,我担心这会影响 Web 服务器上的其他 PHP 程序。
【问题讨论】:
我有一个最终用户请求我启用NO_BACKSLASH_ESCAPES 服务器 SQL 模式。他实际上只能访问一个数据库。我是否只能对他的特定数据库启用此选项?如果不是,而且是全球性的,会有什么样的影响?由于它禁用了反斜杠,我担心这会影响 Web 服务器上的其他 PHP 程序。
【问题讨论】:
MariaDB 和 MySQL 文档都陈述了同样的事情:
NO_BACKSLASH_ESCAPE 禁用使用反斜杠字符 \ 作为 字符串中的转义字符,使其等同于普通 字符。
因此,作为全局设置,这肯定会产生不良影响。
可以在特定会话上设置变量,使其不是全局变量。 例如。
SET @@SQL_MODE = CONCAT(@@SQL_MODE, ',NO_BACKSLASH_ESCAPES');
此外,如果您曾经全局设置过,该设置将在重新启动后恢复,请参阅:setting global sql_mode in mysql
【讨论】: