参考:http://dev.mysql.com/doc/refman/5.5/en/limits.html
join极限值
每个表join的最大个数是61个.
库和表的极限值
在MySQL中,对库和表没有限制,不过在操作系统中会有文件个数的限制.
注:在innodb引擎下,每个库下面最多是40亿个表
表大小的极限值
MySQL内部没有对表大小的限制,通常是操作系统控制的.下表是一些操作系统对单个文件大小的极限值
Operating System | File-size Limit |
Win32 w/ FAT/FAT32 | 2GB/4GB |
Win32 w/ NTFS | 2TB (possibly larger) |
Linux 2.2-Intel 32-bit | 2GB (LFS: 4GB) |
Linux 2.4+ | (using ext3 file system) 4TB |
Solaris 9/10 | 16TB |
MacOS X w/ HFS+ | 2TB |
表中列数量和行大小的极限值
列的数量
每个表最多能创建的列的数量是4096,但是受很多因素引擎,并不能创建这么多.
行
- 每个表(不论什么引擎)的行的最大值是65535个字节.不同的存储引擎可以额外的约束行的最大值,但是不能超过65535个字节.
例如
每个utf8字符需要3个字节,对于CHAR(255)的列,每个值需要765个字节.如果一个表全部是CHAR(255)列,则最大的列的数量为85 (65535/765).
对于VARCHAR(255),每个值需要767个字节,有2个字节存储值的长度. - 每个表都有一个.frm文件来存储表的定义,该.frm文件的大小上限是64KB.
INNODB引擎的一些极限值.
- innodb最大允许1000个列
- innodb的行的最大是8000个字节,其中不包括VARBINARY, VARCHAR, BLOB, or TEXT 等列
- innodb存储的文件格式(COMPRESSED, REDUNDANT)不同,也会影响行的极限值.
参考
CHAR vs VARCHAR
In contrast to CHAR, VARCHAR values arestored as a 1-byte or 2-byte length prefix plus data. The length prefixindicates the number of bytes in the value. A column uses one length byte ifvalues require no more than 255 bytes, two length bytes if values may require morethan 255 bytes
http://dev.mysql.com/doc/refman/5.5/en/char.html
UTF8
UTF-8使用一至四个字节为每个字符编码:
- 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)
- 带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码(Unicode范围由U+0080至U+07FF)
- 其他基本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码
- 其他极少使用的Unicode 辅助平面的字符使用四字节编码
http://zh.wikipedia.org/wiki/UTF8