2016-08-30 59 views
2

我有一個表post數據庫無法保存大型內容

 field | type 
--------------------------------- 
    id  | int A_I P_K 
    title | varchar(300) 
    content | text

當我插入帶有content超過15K字行,我的數據庫只保存10K的話,我失去了5K的話。

我該如何解決這個問題?

我使用MySQL的 PHP框架Laravel 5.1

+0

試''LONGTEXT我 – Ghost

+0

認爲你可以在這裏得到perfact解決方案.. http://stackoverflow.com/questions/6766781/maximum-length-for-mysql-type-text –

+0

這也是一個我真正討厭MySQL的東西。並不是說它有限制,而是它默默接受和截斷數據。它應該無法執行插入操作以保持數據完整。如果您保存JSON或文件數據會變得更糟,因爲您現在將其保存爲數據丟失損壞。 – Rahly

回答

3

如果你讀了MySQL docs on TEXT type - 或任何其它數據類型,你可以找到每一種類型的侷限性。

例如,TEXT特別具有約65K的限制,但是這個限制可以根據字符編碼(例如UTF-8或其他多字節編碼)而減少,因爲它是以字節而不是字符計算的。

最大長度爲65,535(216 - 1)個字符的TEXT列。如果值包含多字節字符,則有效最大長度會減少。每個TEXT值都使用一個2字節長度前綴進行存儲,該前綴表示該值中的字節數。

可以給出這種類型的可選長度M.如果這樣做了,MySQL將創建列作爲最大的TEXT類型,其大小足以保存長度爲M個字符的值。

所以,如果您的需求超過這些限制你應該選擇那些有能力處理更大的有效載荷,如MEDIUMBLOBLONGBLOB,它可以處理高達16M和4G repsectively一個類型。

1

相反類型的 - >TEXT(65535字) 利用類型 - >MEDIUMTEXT(女巫可以包含16萬個字)

2

類型存儲在數據庫領域,爲您提供了類似空間「微小」車間,實驗室,「中型」工廠,「長」像一個大型工廠。

但明智地選擇,因爲「空間」有時會比需要的資源更多地佔用資源。它的目的使用字段的類型。

 Type | Maximum length 
-----------+------------------------------------- 
    TINYTEXT |   255 (2^8 −1) bytes 
     TEXT |  65,535 (2^16−1) bytes = 64 KiB 
MEDIUMTEXT | 16,777,215 (2^24−1) bytes = 16 MiB 
    LONGTEXT | 4,294,967,295 (2^32−1) bytes = 4 GiB 
+1

解釋你答案的代碼會提高它的價值。 – zx485

+0

@ zx485希望它有助於更​​好地理解,thx的建議 – zoore