3

我们一直在用 ColdFusion 和 MySQL 做一些测试,有点困惑。我们知道您可以在 /etc/my.cnf 文件中设置不同的“sql-mode”标志,这将导致 MySQL 以特定方式运行,具体取决于定义的模式。我们知道您也可以在启动 MySQL 时使用“--sql-mode=”标志设置这些标志。

在 /etc/my.cnf 中,我们看到没有定义模式(其中一个被注释掉了),所以我们添加了 'sql-nodes=""' 并重新启动了 mysql (/etc/init.d/mysqld restart)。每当我们进入 MySQL 命令行查看设置的模式时,输出如下:

mysql> SELECT @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
|                   | 
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT @@SESSION.sql_mode;
+--------------------+
| @@SESSION.sql_mode |
+--------------------+
|                    | 
+--------------------+
1 row in set (0.00 sec)

这告诉我没有模式,这就是我们想要的。然而,在 ColdFusion 8 中做同样的事情,我们看到以下内容:


SELECT @@GLOBAL.sql_mode;
[empty string]


SELECT @@SESSION.sql_mode;
STRICT_TRANS_TABLES

这表明 Global sql-mode 为空,而 Session sql-mode 设置为 ' STRICT_TRANS_TABLES',这是我们不想要的。

现在,在我们做任何其他事情之前,我可以在 ColdFusion 中将 Session sql-mode 设置为空,这给了我想要的效果,但我真的不想去每个查询并添加它。

我(尝试)查看 /etc/init.d/mysqld 脚本以查看是否可以找到设置模式的位置,但什么也没看到。

你们对正在发生的事情有什么建议或想法吗?就好像 ColdFusion 将它设置在某个地方一样,但是我可以看到 ColdFusion 管理员中没有任何东西可以设置它。

4

3 回答 3

5

我对此做了一些研究,看起来这是与 Java 或 JDBC 的兼容性问题:

驱动程序需要启用 STRICT_TRANS_TABLES 模式以强制执行截断检查的 JDBC 合规性。

如果您不能使用 STRICT_TRANS_TABLES 作为 sql_mode 的一部分,那么您必须通过添加“jdbcCompliantTruncation=false”作为 URL 配置参数来禁用截断检查。

在这里找到:http ://bugs.mysql.com/bug.php?id=23371

于 2009-02-26T19:00:56.223 回答
1

我的猜测是 CF/JDBC 连接中的某处正在缓存该信息。您是否尝试过重新启动 CF 或添加新数据源以查看会发生什么?

于 2009-02-26T18:26:16.010 回答
0

根据 Ben Doom 所说,您可能想尝试使用 MySQL 的 MyODBC 驱动程序为 MYSQL 设置数据源,看看是否得到不同的结果。

于 2009-02-26T19:04:17.980 回答