2015-02-10 18 views
3

我们有一个工作流系统,用于将工作抵消给其他服务器。工作流程工作数据近来已经增长得相当大(因为我们习惯了)。在json编码数组中存储高达6MB的数据。默认SELECT在mysql中的字段限制与PHP?

在与phpmyadmin结合的开发服务器上,我们可以将LONGBLOBjob_data字段的内容全部拉出来,并在文本编辑器中查看以确认整个json数组在那里。

当我们尝试使用php提取数据时,感觉我们正在触及某种默认限制。

查询是没有什么特别的:

SELECT 
    workflow_ID, 
    job_script, 
    job_created_time, 
    job_data 
FROM 
    workflow 
WHERE 
    job_started_time IS NULL 
ORDER BY 
    job_created_time 
ASC 
LIMIT 0,1 

当打印job_data排它被截断。我们发现问题的例子是db中的4.7mb。

有没有人有任何其他类似的问题,是否有一个PHP MySQL的SELECT限制,我可能需要增加?我在谷歌或这里找不到任何东西。

提前许多感谢, 约翰

+1

max_allowed_pa​​cket的是相当多多少数据可以打线的极限,在任何方向。 – 2015-02-10 21:31:34

+0

小方面:不需要在ORDER BY中使用ASC,因为它是默认值。如果您为了清晰起见而喜欢它,没有问题 - 只是想让我知道。 – rick6 2015-02-10 21:32:50

+0

你如何阅读这些数据? mysql,mysqli,pdo? – 2015-02-10 21:37:15

回答

0

在效应初探从上面提意见,@Lashane和@MarcB

对我来说,答案的帮助,因为我使用PDO:

加入您PDO __construct选项阵列\PDO::MYSQL_ATTR_MAX_BUFFER_SIZE由gizmola上phpFreaks发现:

$this->db_con = new \PDO("mysql:host=$db_hostname;dbname=$db_database", 
             "$db_username", 
             "$db_password", 
             array(
              \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", 
              \PDO::MYSQL_ATTR_MAX_BUFFER_SIZE=> 16777216 /* 16mb max output to php from field */ 
             ) 
            ); 

对提取,添加\PDO::PARAM_LOB到所需的列(其中$column_number在我的情况是4,即job_data为OP查询):

$statement->bindColumn($column_number, $lob, \PDO::PARAM_LOB);