2015-12-21 77 views
2

我有一个类型为“文本”的表中的字段,通常包含“base64”中的图片;当图像很大时,它们约有200,000个字符。基地的“文本”允许我存储多达400万字符。但是主义切入64512.学说自动限制我的文本字段的长度为64512个字符

版本我的字符串:

  • 主义2.4.4上的Symfony 2.5.3

  • DB:微软SQL Server 2000中 - 8.00.2039(英特尔X86) 2005年5月3日23点18分38秒 版权所有(C)1988-2003微软公司 企业版在Windows 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。

+0

你确定主义是这里的问题吗?请参阅:http:// stackoverflow。com/questions/3008267/sql-server-text-datatype-maxlength-65-535 –

+0

感谢您的回答,但是,原则是问题,数据库我有整个字符串,这就是为什么我知道尺寸是20万字。 http://s23.postimg.org/lqe3mciwr/basedatos.png – Luciano

+0

什么时候截断发生?在插入或水合后? – Ryan

回答

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”添加到你的领域

+0

谢谢,但是当我改变数据类型SHOWME此错误: http://s15.postimg.org/mwtcm4jaz/error.png – Luciano

+0

我认为你需要做这样的somethink:@ORM \列(名称=“mensaje” ,类型=“文本”,columnDefinition =“LONGTEXT”) –

+0

谢谢你,但你申报领域的方式,因为我们目前有它 – Luciano

0

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

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

当图像被上传,我们BASE64_ENCODE($镜像文件),并坚持认为...

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。没有从数据库转换。

+0

谢谢,但我保留一个字段完整的HTML,带有包含base64中的一些图像的标签,我无法控制它,因为它是由插件生成的html – Luciano

0

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

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

默认情况下设置为4096,并且存在问题。 感谢您的时间!