2015-12-21 63 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,並且存在問題。 感謝您的時間!