我是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();
// }
?>
答案 0 :(得分:2)
这是TEXT列的大小。
http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
您将str声明为TEXT。如果您想要存储更多内容,则需要MEDIUMTEXT或LONGTEXT。