char(n)如何用二进制表示它的数据?

dxpyg8gm  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(459)

我现在正在读罗宾尼克松的学习php,mysql和javascript的书。特别是关于使用mysql的数据库的章节。这是我正在努力彻底理解的主题。
“然而,year字段有更多可预测的值,因此我们使用更有效的char(4)数据类型来代替varchar。参数4允许4字节的数据,支持从–999到9999的所有年份;一个字节由8位组成,其值可以是00000000到11111111,十进制为0到255
在上面的示例中,char(4)被设置为存储4个字符,这些字符将表示一个四位数的年份条目。为什么-999到9999是唯一的选择。如何用二进制表示它仅限于这些值?我最初的想法是,因为4字节是32位,如果所有32位都设置为1,那么2^32大约是40亿个无符号,20亿个有符号,这就是可以存储的量。
谢谢你的解释。

mznpcxlj

mznpcxlj1#

首先,对于有限的年份值,使用year(yyyy、1901到2155或0000):1字节。
int(4)可以存储在2个字节中,最好(因为它没有2156年的问题)。实际为4字节;正如@billkarwin提到的,小int需要2个字节。
char(4)通常(单字节字符集)被限制为4个字节,但是char用空格填充,比如 '712 ' 不能立即与算术结合使用。
varchar(4)需要比char(4)更多的字符,并且允许更小的字符串 '712' .

cyej8jka

cyej8jka2#

你引用的那本书似乎建议使用char来存储年份值,尽管它不以二进制形式存储,但它存储的是数字字符。如果您使用四个字节来存储数字的二进制值,那么四个字节可以存储更大的范围,这是正确的。
令人惊讶的是,这本书关心的是编码varchar长度所需的单个额外字节,然后它使用char以如此低效的方式存储数字年份值。
这是一个“一分钱聪明,一分钱愚蠢”的例子
把这本书(或任何一本书)带上一点盐。记住,科技书籍是由人写的,他们可能会犯错误。

相关问题