Bug #36850 | data type storage requirements | ||
---|---|---|---|
Submitted: | 21 May 2008 11:59 | Modified: | 15 Oct 2009 10:41 |
Reporter: | Roland Bouman | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Documentation | Severity: | S3 (Non-critical) |
Version: | OS: | Any | |
Assigned to: | MC Brown | CPU Architecture: | Any |
[21 May 2008 11:59]
Roland Bouman
[21 May 2008 12:36]
Paul DuBois
Actually, there is a row size limit of 65,535 bytes: http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
[21 May 2008 12:45]
Roland Bouman
Paul, the point is that the current doc mentions MyISAM, which is irrelevant here. My initial report does mention the internal row size limit too, and that is indeed something that one needs to realize when discussing the internal size occupied by values of the different data types. So, yes, there is an internal row size limit of 64k, but it has got nothing to do with "storage", and also not with a particular storage engine like MyISAM.
[21 May 2008 13:06]
MySQL Verification Team
Thank you for the bug report.
[21 May 2008 19:43]
Peter Laursen
It should also be clarified how that 'internal row size limit of 64k' applies to BLOB/TEXT types. For (disk) *storage* it does not apply (BLOB/TEXT type data are not stored within the table) but how for *memory* If there is an 'internal row size limit of 64k' how then use a LONGBLOB (that to my best knowledge can be up to ~4 GB). So I must assume that the 'internal row size limit of 64k' does not apply to BLOBs/TEXTs too? Btw: also here http://bugs.mysql.com/bug.php?id=34689 i pointed to another paragraph that is also written with MyISAM in mind only. That was *not a bug* however ... ;-)
[21 May 2008 19:47]
Peter Laursen
Please ignore the btw: link was wrong and I am not able to find the right one!
[21 May 2008 19:52]
Roland Bouman
Peter, good point. It would be nice to have the impact of blob storage noted here too. TO the best of my knowledge, BLOB data is stored "somewhere" in memory at runtime. The thing that is considered the "row" is limited to 64k. BLOB and TEXT fields write a pointer into that row buffer, and the pointer is the location where the data is at. Another way of putting it is to say that BLOBs and TEXT are stored "out of line" and other data is stored "inline". I am not entirely sure if it works exactly like this, but this design allows you to have many rows in memory, without actually loading all the BLOBs in memory too. Instead, the BLOB data can be loaded only when the pertinent row is processed, which can then materialize the BLOB data.
[15 Oct 2009 10:41]
MC Brown
I've reworded and expanded the content in this section to try and make it clearer what is going on and what is being described here, in addition to making some notes about the effects (And vagaries) of other storage engines and their impact on storage. Since it impossible to determine the storage requirements of engines that use inline compression (Archive, Falcon, Maria), or engines that use variable storage lengths according to the value being stored (most notable Falcon), adding more detail here is not practical. I have also added a separate note to the todo list so that we can at least attempt to describe these limits and storage requirements on an engine-by-engine basis in the future.