如何正确传递JDBC url中的会话变量?

时间:2014-10-17 12:28:37

标签: java mysql jdbc

我必须增加group_concat_max_len。 我不能通过preparestatement来做,而且我也不能在mysql my.conf文件中这样做。

我在mysql文档中发现有一个选项可以在url中传递会话变量。 但是没有例子,我试着这样做:

jdbc.url=jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=group_concat_max_len:204800

我有这个例外:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':204800' at line 1

我也尝试过这样:

jdbc.url=jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=group_concat_max_len,204800

因为官方文档说:

sessionVariables

A comma-separated list of name/value pairs to be sent as SET SESSION ... to the server when the driver connects.

Since version: 3.1.8

任何想法???

3 个答案:

答案 0 :(得分:18)

试试这个:

jdbc.url=jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=group_concat_max_len=204800

答案 1 :(得分:6)

如果您需要添加多个会话参数,可以这样做:

jdbc:mysql://localhost/database?sessionVariables=FOREIGN_KEY_CHECKS=0&sessionVariables=SQL_SAFE_UPDATES=0

答案 2 :(得分:2)

MySQL Connector/J Configuration Properties文档已进行了更新,具有更好的描述,尤其是在连接URL中设置多个系统变量时:

  

sessionVariables

     

以逗号或分号分隔的名称=值对列表,以   驱动程序连接后,将[会话] ...设置到服务器。

     

自版本:3.1.8

哪个会产生这样的网址:

jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=group_concat_max_len=204800,bulk_insert_buffer_size=42

可以使用分号代替逗号。可以在同一URL中使用两者的混合。

这仅适用于范围为SESSION的系统变量(您可以通过查看Server System Variables的列表来找出可以在SESSION级别设置的变量)。 如果该变量不存在,不是服务器系统变量或者其作用域仅限于GLOBAL,则连接将失败。