mysql的表最多可設定多少字段?

2021-09-29 14:01:27 字數 1942 閱讀 7013

最近在開發的時候,遇到乙個報錯:can't create table***(errno: 185 "too many columns")根據英文,意思是表的字段太多了,那麼mysql的資料表最多能有多少列呢?

mysql每個表要求的最大列是1024,每個資料庫最多可建立20億個表等等?????
是的,大家都這麼說,但是這個1024是**來的呢,有科學依據(官方承認)嗎?博主算了下自己的表,只有1008個字段左右,很明顯是不超過1024的,但是還是報錯了。這麼看來,這個1024列的說法也不過是以訛傳訛罷了。下面我們來扒一扒那些官方的說法。

mysql對每個表有4096列的硬限制,但是對於給定的表,有效最大值可能會更少。確切的列限制取決於幾個因素:

(1)表的最大行大小限制了列的數量(可能還有大小),因為所有列的總長度不能超過該大小。

請參閱 行大小限制。

(2)單個列的儲存要求限制了給定最大行大小內的列數。某些資料型別的儲存要求取決於儲存引擎,

儲存格式和字符集等因素。請參見第11.7節「資料型別儲存要求」。

(3)儲存引擎可能會施加其他限制表列計數的限制。例如, innodb每個表最多有1000列。

請參見第14.24節「 innodb限制」。有關其他儲存引擎的資訊,請參見 第15章,備用儲存引擎。

(4)每個表都有乙個.frm包含表定義的檔案。該定義以可能影響表中允許的列數的方式影響此

檔案的內容。請參見 .frm檔案結構施加的限制。

參考:mysql官方手冊之表列數限制和行限制

按照官方手冊說法,mysql的表可以有4096列,但是博主這次建表,頂多1000字段出頭,怎麼算都沒有超標啊。可能是和儲存引擎有關?

乙個表最多可以包含1000列。

乙個表最多可以包含64個 二級索引。

預設情況下,索引鍵字首長度限制為767個位元組..

....

以上是手冊上的說法,原來innodb的表果然限制更多一些,注意是最多可以有1000列!而不是1024列,網上有些說法是錯誤的,不要輕信。

參考:innodb引擎的列

(1)innodb引擎對於列的硬性要求是不能超過1000列myisam引擎能達到4096的限制

(2)乙個表最多可以包含64個二級索引,兩種引擎都有這個限制。

(3)索引鍵字首長度限制為767個位元組 ,參考:innodb主鍵的長度為什麼不能大於767位元組

(4)mysql本身對所有列的組合大小強加了65535的行大小限制,這個更多對應單個列的字段長度不能大於65535位元組

(1)建立表的時候,選擇myisam引擎即可

(2)減少列的長度,當表的列長度大於1000個字段,那麼應該是設計上出問題了

(3)沒事多看手冊,網上一搜清一色都是1024列,俺也不知道他們是怎麼算出來的。

**********==== 2019/12/17***************==

以上的1000列限制只適用於 5.6.9版本以下,mysql從大於5.6.9開始,innodb的列限制改為1017列!

最後,相信手冊的力量!

end

MySQL一張表最多能存多少條記錄?

vagrant 1月7日提問 問題對人有幫助,內容完整,我也想知道答案 0問題沒有實際價值,缺少關鍵內容,沒有改進餘地 myisam 引擎,一張表最多能存多少條記錄,在什麼樣的資料規模下會考慮分表?預設排序 時間排序 答案對人有幫助,有參考價值 2答案沒幫助,是錯誤的答案,答非所問 已採納 見官方文...

Mysql 的主從複製,最多支援多少個資料庫同步

主從複製理論上支援無窮大的從庫個數,實際情況下,受伺服器頻寬和讀寫能力的影響 請參考mysql官方手冊的建議 理論上,通過使用單個主伺服器 多從伺服器設定,可以通過新增更多的從伺服器來擴充系統,直到用完網路頻寬,或者你的更新負載已經增長到主伺服器不能處理的點。在獲得的收益開始吃平之前,為了確定可以有...

Mysql命令alter add 增加表的字段

alter add命令用來增加表的字段。alter add命令格式 alter table 表名 add欄位 型別 其他 例如,在表myclass中新增了乙個欄位passtest,型別為int 4 預設值為0 mysql alter table myclass add passtest int 4 ...