每个会话更改 MySQL 模式

Changing MySQL mode per session

我有一位支持旧应用程序的开发人员要求我在全局范围内更改我们的 MySQL 模式,使其远离严格模式 - 但是我们在同一台服务器上还有其他几个显然需要严格模式的数据库。

我相信可以在会话级别更改模式,并且我已尝试使用以下代码来完成此操作。

session_start();

include_once("./includes/conn.php");
mysql_query("SET SESSION sql_mode = ''");

但这似乎不起作用 - 测试模式报告返回全局值和会话值相同。

session User : name
session Security : 27478239

MySQL server version : 5.5.5-10.0.23-MariaDB
GLOBAL : STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
SESSION : STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

是否可以在会话级别(或数据库级别)更改 SQL 模式?如果可以,如何实现?

two syntaxes (well, actually three) 来改变一个session值,它们都应该是等价的:

SET SESSION sql_mode = '';
SET @@SESSION.sql_mode = '';
SET @@sql_mode = '';

读回值:

SELECT @@SESSION.sql_mode;
SELECT @@sql_mode;

当然,既然是会话值:

  • 不会影响全局设置
  • 它不会在当前会话后继续存在
  • 不会泄露给其他会话