Mysql存储函数截断长度为65535个字符

时间:2016-12-09 04:43:25

标签: php mysql pdo

我是mysql中存储函数的新手,发现自己想知道为什么我的结果在65535个字符长度被截断。我觉得它与concat函数有关,但无法解决这个问题。

我的测试表中有超过10k行,但是这个函数只在我生成的表中组装了1936行,我知道它被截断了,因为我的结束表标记丢失了......任何见解都会非常感激!

这是我的存储过程:

CREATE DEFINER=`root`@`localhost` FUNCTION `hotdog`() RETURNS text CHARSET utf8
BEGIN
DECLARE str TEXT DEFAULT "<table>";
DECLARE done INT DEFAULT 0;
DECLARE var1 INT;
DECLARE var2 INT;
DECLARE curs CURSOR FOR  SELECT * from `test`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN curs;
    SET done = 0;
    REPEAT
        FETCH curs INTO var1, var2;
        SET str = concat(str, "<tr><td>");
        SET str = concat(str, var1);
        SET str = concat(str, "</td><td>");
        SET str = concat(str, var2);
        SET str = concat(str, "</td></tr>");
    UNTIL done END REPEAT;
SET str = concat(str, '</table>');
RETURN str;
END

这是我的php,它正在调用它......

<?
    include 'includes/config.inc.php';
    $q = $db->prepare("select hotdog() as hotdog1");
    $q->execute();
    $row = $q->fetch(PDO::FETCH_ASSOC);
    echo $row['hotdog1'];
    // for($i=1; $i<500000; $i++)
    // {
        // $qs = "INSERT INTO `test`(`id`, `test`) VALUES (Null,$i)";
        // $q = $db->prepare($qs);
        // $q->execute();
    // }
?>

1 个答案:

答案 0 :(得分:2)

这是TEXT列的大小。

http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html

您将str声明为TEXT。如果您想要存储更多内容,则需要MEDIUMTEXT或LONGTEXT。