我目前正在阅读Robin Nixon的学习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亿有符号,这就是可以存储的数量。
我感谢您的任何解释。
答案 0 :(得分:1)
您引用的书似乎建议使用CHAR来存储年份值,即使它不以二进制形式存储,也会存储数字字符。您正确地认为,如果您使用四个字节来存储数字的二进制值,那么四个字节可以存储更大的范围。
令人惊讶的是,这本书担心要为VARCHAR的长度编码所需的单个额外字节,然后它使用CHAR以这种低效的方式存储数字年份值。
这是“聪明的一分钱,愚蠢的人”的例子。
把这本书(或任何一本书)与一粒盐一起吃。请记住,技术书籍是人写的,它们可能会犯错误。
答案 1 :(得分:0)
首先,对于有限的年份值,请使用YEAR(yyyy,1901至2155,或0000):1个字节。
'712 '
,并且不能立即用于算术运算。 / li>
'712'
。