mysql group_concat函数被截断的问题

1. mysql的 group_concat 函数默认返回1024个字节长度,超过长度的会被截断。最近程序中就遇到这个问题了。

通过如下命令可以查看到当前mysql系统的参数:

mysql> show variables like "%concat%"; 
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| group_concat_max_len | 1024  |
+----------------------+-------+
1 row in set (0.00 sec)

2. 有两个方法可以设置group_concat_max_len的值

(1) 在 /etc/my.cnf 中的[mysqld]加上 group_concat_max_len = 10240,需要重启mysql才能生效

(2) 在命令行下输入:

SET GLOBAL group_concat_max_len=10240;
或者 SET SESSION group_concat_max_len=10240;

GLOBAL 是对全局生效的,而SESSION是对当前会话有效。

(3)如果是在c/c++代码中连接mysql来dump数据的,代码里面可以用 mysql_options 函数来设置。函数的原型(ref)是

int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)

一般是在mysql_init()之后、以及mysql_connect()或mysql_real_connect()之前调用mysql_options()。参数option是打算设置的选项,arg参量是选项的值。我们要用到的option是MYSQL_INIT_COMMAND,表示连接到MySQL服务器时将执行的命令。再次连接时将自动地再次执行。

示例代码如下:
MYSQL *conn;
conn = mysql_init(0);
if (NULL == conn)
{
cerr << "Init mysql failed: insufficient memory!" << endl; return EXIT_FAILURE; } if (0 != mysql_options(conn, MYSQL_SET_CHARSET_NAME, g_charset.c_str())) { cerr << "Set extra connect options failed!" << endl; return EXIT_FAILURE; } if (0 != mysql_options(conn, MYSQL_INIT_COMMAND, "SET SESSION group_concat_max_len=10240")) { cerr << "Set extra connect options group_concat_max_len failed!" << endl; return EXIT_FAILURE; } .... mysql_real_connect(...) mysql_query(...) ...[/code]

发表评论

电子邮件地址不会被公开。 必填项已用*标注