前言
在电脑中,数据是由0和1构成的,它模拟了自然界的开与关,通与止,阴与阳等等的一些现象,也就是我们称之为“二进制”中的数据。
数据在计算机中以二进制的形式存在的,也必须用二进制的形式来表示,也就是机器语言。机器语言是一种计算机语言(低级语言),它是计算机唯一可以读懂的语言,由1和0组成。
单位
最小数据单位就是 “位”,符号“Bit”或“b”(小写),即一个比特,内容是0或1,表示一位二进制信息。
单位从小到大排序
比特Bit(b), 字节Byte(B), 千字节Kilobytes(KB), 兆字节Megabytes(MB), 吉字节Gigabyte(GB) and 太字节terabyte(TB)
换算关系
8b = 1B
1024B = 1k、1024kb = 1m、1024m = 1G、1024G = 1T
1M 等于 2^20 bytes ?
1M=1024KB,1KB = 1024byte
故:1M = 1024*1024 = 2^20byte = 1048576 byte
Mysql中的单位
ASCII码:
一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。
UTF-8编码:
一个英文字符等于一个字节,一个中文(含繁体)等于2个字节。
Unicode编码:
一个英文等于两个字节,一个中文(含繁体)等于2个字节。
UTF-16编码:
一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
UTF-32编码:
世界上任何字符的存储都需要4个字节。
常见问题:
char 和 varchar 占用空间比较
表结构定义中声明char
和varchar
类型时,必须指定字符串的长度,也就是该列所能存储多少个字符。
注意这里:不是字节,是字符
例如:char(10)和varchar(10)都能存储10个字符
**char(M)**类型的数据列里,每个值都占用M
个字节,如果某个长度小于M
,MySQL就会在它的右边用空格字符补足。
**varchar(M)**类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节
(即总长度为L+1
字节)
BloomFilter布隆过滤器
布隆过滤器中,由于是一个二进制的向量数组,所以每个占用空间是 1bit