Doctrine自动将我的文本字段的长度限制为64512个字符


Doctrine auto limit the length of my text field to 64512 chars

我在一个类型为"text"的表中有一个字段,通常包含"base64"中的图片;当图像较大时,它们的条件是大约200000个字符。基础的"文本"允许我存储多达400万个字符。但《教义》在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 CorporationWindows NT 5.2上的企业版(内部版本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);
  }

我试过:

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

Tnks。

您可以使用长文本-您可以存储长度高达4294967292 的文本

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

为此,您需要将columnDefinition="longtext"添加到字段

在我的项目中,我们使用base64图像(虽然没有你的大),我们使用原则十进制类型。@ORM''列(名称="image",类型="decimal",精度=10,小数位数=4,可为null=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转换。

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

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

默认情况下设置为4096,并且存在问题。谢谢你抽出时间!!!