数据库-MySQL:数据库设计01-字段长度记录->varchar能够存多少个汉字?varchar(100)和char(100)的区别

场景介绍:

  1. 我们在设计数据库时候,总是不可避免的使用的varchar来作为表的字段,但是表长度应该多少呢?
  2. 我们很多时候使用varchar来做字段,为什么不用char?
  3. 每个字段类型可以表示的数据是多少?
  4. 设置多长字段符合业务需求?

在网上找到了,一些文章,所以写下自己的一些日记。

1,varchar(100)能存多少个汉字?

具体还是要看版本的,一个字符占用3个字节 ,一个汉字(包括数字)占用3个字节=一个字符

(1)MySQL 4.0版本以下

varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)。

(2)MySQL 5.0版本以上

varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个。

(3)编码格式相关说明:

UTF8编码中一个汉字(包括数字)占用3个字节
GBK编码中一个汉字(包括数字)占用2个字节

(4)位,字节和字符转换关系:

(a)位:

数据存储的最小单位。每个二进制数字0或者1就是1个位;

(b)字节:

8个位构成一个字节;

即:1 byte (字节)= 8 bit(位);
也就说:1 byte(字节)=255(数字长度)

1 KB = 1024 B(字节);
1 MB = 1024 KB; (2^10 B)
1 GB = 1024 MB; (2^20 B)
1 TB = 1024 GB; (2^30 B)

(c)字符:

a、A、中、+、*、の…均表示一个字符;
一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节;数字属于汉字,和汉字占用一样字节。
一般 gbk 编码下,一个汉字 字符 占用 2 个 字节;

(5)字段类型及其对象

(a)数据类型

列类型(大写)列类型(小写)需要的存储量数值无符号
TINYINTtiny int1 字节-2^7 (-128) ~ 2^7 - 1 (127)0 ~255
SMALLINTsmall int2 个字节-2^15 (-32,768) ~2^15 - 1 (32,767)0 ~65535
MEDIUMINTmedium int3 个字节-8388608~83886070~16777215
INTint4 个字节-2^31(-2147483648) ~ 2^31-1(2147483648)0~4294967295
INTEGERInteger4 个字节
BIGINTbig int8 个字节-2^63 (-9223372036854775808) ~ 2^63-1 (9223372036854775807)0~18446744073709551615
FLOAT(X)float(x)4 如果 X < = 24 或 8 如果 25 < = X < = 53-3.4E+38 和 3.4E+38
FLOATfloat4 个字节
DOUBLEdouble8 个字节

(b)字符类型:

字符类型需要和编码格式:
UTF8编码中一个汉字(包括数字)占用3个字节
GBK编码中一个汉字(包括数字)占用2个字节

列类型需要的存储量
CHAR(M)M字节,1 <= M <= 255
VARCHAR(M)L+1 字节, 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXTL+1 字节, 在此L< 2 ^ 8
BLOB, TEXTL+2 字节, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXTL+3 字节, 在此L< 2 ^ 24
LONGBLOB, LONGTEXTL+4 字节, 在此L< 2 ^ 32
ENUM(‘value1’,‘value2’,…)1 或 2 个字节, 取决于枚举值的数目(最大值65535)
SET(‘value1’,‘value2’,…)1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)

text与blob的区别在于:text不能存储图片。blob是二进制流,text是非二进制。
mysql 的二进制数据类型 BINARY, VARBINARY, BLOB 都没有字符集的概念。

(c)日期类型:

列类型(大写)列(小写)需要的存储量显示格式:
DATEdate3 个字节以YYYY-MM-DD的格式显示,比如:2009-07-19
DATETIMEdate time8 个字节以YYYY-MM-DD的格式显示,比如:2009-07-19,自动存储记录修改时间
TIMESTAMPtime stamp4 个字节以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30
TIMEtime3 个字节以HH:MM:SS的格式显示。比如:11:22:30
YEARyear1 字节以YYYY的格式显示。比如:2009

2,varchar(100)和char(100)的区别

(1)varchar作为可变长字节,所以varchar比char,多一个字节来管理长度。

需要注意的一个点是,一个直接只能管理255的长度,超过255那么就需要多一个字节

(2)varchar创建临时表的时候,会转为char,长度为设置长度

3,参考文章:

一篇文章看懂mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别

mysql整形取值范围_mysql各种数据类型取值范围

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值