最近在開發的時候,遇到乙個報錯: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 ...