我在一个类型为"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,并且存在问题。谢谢你抽出时间!!!