个人随笔
目录
MySQL到底可以存储多少个汉字
2019-03-04 22:04:07

在我们使用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字节极大文本数据

二进制的一些解析

  1. 1B=8bit 1字节=8位)
  2. 1KB=1024B
  3. 1MB=1024KB
  4. 1GB=1024M
  5. 1TB=1024GB

MySQL 5.0以上版本堆varchar和char的处理

1、与编码有关,一般都用UTF-8

  1. UTF-8:一个汉字 = 3个字节,英文是一个字节
  2. 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个字母的话,会报如下错误

  1. Data truncation: Data too long for column 'content' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1

实测:全中文Text可以存放21845,要是存放21846个,也会报如下错误

  1. Data truncation: Data too long for column 'content' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1

证明上面的是正确的结论

结语

上面只是暂时的理解,也有可能有出错,所以以后会继续更新
总结起来,有几点:
1、经常变化的字段用varchar
2、知道固定长度的用char
3、尽量用varchar
4、超过255字符的只能用varchar或者text
5、能用varchar的地方不用text   

 2070

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2