Doctrine auto将文本字段的长度限制为64512个字符

时间:2015-12-21 15:06:26

标签: php sql-server symfony doctrine-orm mapping

我在“text”类型的表中有一个字段,它通常包含“base64”中的图片;当图像很大时,它们会包含大约200,000个字符。基础的“文本”允许我存储多达400万个字符。但是Doctrine在64512中删除了我的字符串。

版本:

  • Symfony 2.5.3上的学说2.4.4

  • 数据库:Microsoft SQL Server 2000 - 8.00.2039(英特尔X86) 2005年5月3日23:18:38 版权所有(c)1988-2003 Microsoft Corporation Windows NT 5.2(Build 3790:Service Pack 2)上的企业版

该领域宣言。

 /**
 * @var text
 *
 * @ORM\Column(name="mensaje", type="text")
 */
 private $mensaje;

Getter方法:

 public function get($value){
    return mb_detect_encoding($value, mb_detect_order(), true) === 'UTF-8' ?
    $value : mb_convert_encoding($value, 'UTF-8');    
 }
 /**
  * Get mensaje
  *
  * @return text
  */
  public function getMensaje()  {
    return $this->get($this->mensaje);
  }

我试过了:

  • 使用“length”限制文本大小
  • 使用其他数据类型,例如“clob”或“longtext”
  • 将数据添加到字符串的末尾以验证是否存在php问题(没问题)

TNKS。

3 个答案:

答案 0 :(得分:1)

您可以使用longtext来存储长度最大为4294967292的文本

    TINYTEXT   : 2 ^  8 - 1 = 255 
    TEXT       : 2 ^ 16 - 2 = 65534 
    MEDIUMTEXT : 2 ^ 24 - 3 = 16777213 
    LONGTEXT   : 2 ^ 32 - 4 = 4294967292 

为此,您需要添加columnDefinition =" longtext"到你的领域

答案 1 :(得分:0)

在我的项目中,我们使用base64图像(虽然不像你的那么大),我们使用了一个主义十进制类型。     @ORM \ Column(name =“image”,type =“decimal”,precision = 10,scale = 4,nullable = true)

我们使用sql server 2012但使用varchar(MAX)数据类型。

当图像上传时,我们使用base64_encode($ imageFile)并坚持......

    public function preUpload()
    {
        if(null === $this->imageFile){
        return;
        }

        $data = file_get_contents($this->imagefile);
        $base64 = base64_encode($data);

        $this->image = $base64;
    }

    public function getImage()  {
    return $this->get($this->Image);
}

然后getImage返回我们用来显示的base64编码字符串。我的字符串长度为129400。没有从DB转换。

答案 2 :(得分:0)

PHP用几个字符截断我的所有字符串。解决方案是在php.ini

mssql.textlimit = 2147483647
; Valid range 0 - 2147483647. Default = 4096.
mssql.textsize = 2147483647

默认设置为4096,存在问题。 谢谢你的时间!!!