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

m.a*_*bin 10 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
Run Code Online (Sandbox Code Playgroud)

我有这个例外:

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
Run Code Online (Sandbox Code Playgroud)

我也像这样尝试过:

jdbc.url=jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=group_concat_max_len,204800
Run Code Online (Sandbox Code Playgroud)

因为官方文件说:

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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗???

Cri*_*eco 19

试试这个:

jdbc.url=jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=group_concat_max_len=204800
Run Code Online (Sandbox Code Playgroud)


小智 6

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

jdbc:mysql://localhost/database?sessionVariables=FOREIGN_KEY_CHECKS=0&sessionVariables=SQL_SAFE_UPDATES=0
Run Code Online (Sandbox Code Playgroud)


nai*_*ian 5

MySQL的连接器/ J的配置属性,因为有一个更好的描述,特别是当它涉及到在连接URL中设置多个系统变量文档已被更新:

会话变量

当驱动程序连接时,将作为 SET [SESSION] ... 发送到服务器的逗号或分号分隔的 name=value 对列表。

自版本:3.1.8

这会导致这样的 URL:

jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=group_concat_max_len=204800,bulk_insert_buffer_size=42
Run Code Online (Sandbox Code Playgroud)

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

这仅适用于具有SESSION范围的系统变量(您可以SESSION通过查看Server System Variables列表找出哪些可以在-level设置)。如果该变量不存在,如果它不是服务器系统变量或其作用域是GLOBAL-only ,则连接将失败。