据我所知,在数据库中,int占用的空间少于字符串。但是如果int真的长于字符串会怎么样呢。例如9.455.487 vs“John”。哪一个会占用更多空间? TY
答案 0 :(得分:7)
从documentation,int
的大小是4个字节,而对于char
,它是“M×w个字节,0 <= M <= 255,其中w是字符集中最大长度字符所需的字节数。“ M是声明的列大小。
因此,当您谈到占用了多少空间时,只要该值在int
范围内,int
将占用4个字节的值。像“John”这样的字符串,如果声明为char(4)
将占用4 * w字节,所以至少4个字节,假设w为1。
长话短说,一个数字的大小不是你写出来的字符长度,而是用二进制形式表示它的字节数。
答案 1 :(得分:5)
您应该知道“int”(integer)是什么以及strings是什么。整数始终具有一定的长度,该长度表示字节在其二进制表示中的数量。另一方面,字符串是序列的字节。因此,根据encoding,每个符号可以是一个或多个字节。
9.455.487
比"John"
“更长”的事情在这里无关紧要。相关的是DBMS(或其他任何环境)如何代表这些东西。你会看到“更长”的整数与“更短”的字符串,而不是这样,它只是“屏幕”表示的问题(即你在屏幕上看到的内容)。
回答问题 - 对于MySQL,INT
是4个字节,而字符串数据类型可能有动态长度 - 例如VARCHAR
。静态字符串长度日期类型为CHAR
,从该角度来看,您的数字和字符串将具有相同的长度(4个字节)。字符串和整数只是比较“长度”的不同东西。视觉表现不应该让你感到困惑。这些实体具有不同的内部结构,因此,不应根据其视觉表示在“长度”上进行比较。
此外,您应该知道并非总是整数将具有4个字节的长度 - 因为即使在MySQL中,您的数字也可能属于,例如,BIGINT
数据类型(长度为8个字节)。并且,如上所述,对于字符串,还存在编码问题。例如,UTF-8编码的字符串可能有两个(甚至更多)字节来表示一些非ASCII符号。在这种情况下,每个符号将增加1个字节到总字符串长度。