在我们使用mysql的时候,对字段的选用以及具体使用什么类型会很有疑问,这里按如下标准即可
类型以及所占字节如下类型
大小
CHAR
0-255字节定长字符串
VARCHAR
0-65535字节变长字符串
TINYBLOB
0-255字节不超过255个字符的二进制字符串
TINYTEXT
0-255字节短文本字符串
BLOB
0-65535字节二进制形式的长文本数据
TEXT
0-65535字节长文本数据
MEDIUMBLOB
0-16777215字节二进制形式的中等长度文本数据
MEDIUMTEXT
0-16777215字节中等长度文本数据
LONGBLOB
0-4294967295字节二进制形式的极大文本数据
LONGTEXT
0-4294967295字节极大文本数据
二进制的一些解析1B=8bit(1字节=8位)
1KB=1024B
1MB=1024KB
1GB=1024M
1TB=1024GB
MySQL 5.0以上版本堆varchar和char的处理
1、与编码有关,一般都用UTF-8
UTF-8:一个汉字=3个字节,英文是一个字节
GBK:一个汉字=2个字节,英文是一个字节
2、在MySQL中 varchar(n)和char(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别。
3、 MySQL 的 char(n) 和varchar(n) 可以直接存储 n 个汉字. 而不是 n/3或者 n/2 个,mysql 屏蔽了具体的存储细节,而直接以实际字符的个数来决定char存储的个数。
Text、MEDIUMTEXT、LONGTEXT
上面三个如果是UTF-8编码的话,最多可以储存的汉字数就必须除以三
类型
汉字数目
Text
21845
MEDIUMTEXT
5592405
LONGTEXT
143165576
实测:英文Text可以存放65535,要是存放65536个字母的话,会报如下错误
Datatruncation:Datatoolongforcolumn'content'at row1;nested exceptioniscom.mysql.jdbc.MysqlDataTruncation:Datatruncation:Datatoolongforcolumn'content'at row1
实测:全中文Text可以存放21845,要是存放21846个,也会报如下错误
Datatruncation:Datatoolongforcolumn'content'at row1;nested exceptioniscom.mysql.jdbc.MysqlDataTruncation:Datatruncation:Datatoolongforcolumn'content'at row1
证明上面的是正确的结论
结语
上面只是暂时的理解,也有可能有出错,所以以后会继续更新
总结起来,有几点:
1、经常变化的字段用varchar
2、知道固定长度的用char
3、尽量用varchar
4、超过255字符的只能用varchar或者text
5、能用varchar的地方不用text