2009-08-28 139 views
9

我有一個MySQL數據庫,其中我將一堆文本信息存儲到數據庫的文本字段中。該欄目是MySQL文本列被截斷

名稱:信息
類型:文本
校對:utf8_general_ci

我有一個用戶接入〜的信息64KB進入該領域,它怪胎。它會截斷最後3個字符。在這種情況下,它恰好是選項卡的結尾,因此它將頁面上的所有內容都關閉。如果我手動進入數據庫並刪除幾個字母並添加後面,那麼下次我去編輯它時,最後3個將再次被刪除。

phpMyAdmin是說明該字段爲長而可能無法編輯。所以我試圖在我的cms頁面上編輯它,我仍然收到相同的結果。

是否有在MySQL中的單個數據庫文本列任何已知的問題與此多少數據?它似乎不應該有。

回答

13

我覺得一個MySQL文本字段的最大尺寸小於2^16字節。使用UTF-8編碼,這可能意味着更少的字符。您可以將MEDIUMTEXT用於2^24或將LONGTEXT用於2^32個字節,有關詳細信息,請參閱MySQL-Docs

啊,而且一定要檢查你的max_allowed_packet大小。

+6

我沒有意識到MySQL中有不同的文本類型。 – corymathews 2009-08-28 14:36:00

+0

LONGTEXT而不是BIGTEXT – SysHex 2015-01-21 22:14:50

+1

謝謝,SysHex,你當然是對的。我糾正了這一點。 – 2015-01-23 08:23:42

0

有這個東西叫做documentation,說是爲數據類型所需的存儲是:

BLOB, TEXT L + 2 bytes, where L < 2^16 
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24 
LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32 

注意,即2^16 = = 65536

0

我的理解是文本有65000的最大值字節和大於該值的任何內容都將被截斷。這似乎解釋你的情況。你說你的用戶輸入的是64kb左右,是否可以超過65kb,只有幾個字節?

考慮使用BLOB。

5

你一定要記住,文本有65,535個字符最多。如果您的內容超過64K字節,則可能超出字段字符的限制。我建議將您的列類型更改爲MEDIUMTEXT或LONGTEXT,看看是否可以解決您的問題。