char是否占用数据库中的1个字节?
编辑: 如果我将列定义为varchar(1),它会为我保留1或2个字节吗?
答案 0 :(得分:4)
取决于它是什么类型的char。如果字符串的类型是char / varchar,那么如果是unicode则为1个字节:nchar / nvarchar则最可能是2个字节。
答案 1 :(得分:2)
无论值是多少,Char(k)都需要k个字节, varchar(k)n + 1个字节,其中n =值中的字符数,但是最大k + 1个字节
Value CHAR(4) Storage Required VARCHAR(4) Storage Required
'' ' ' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes
答案 2 :(得分:1)
是的,如果您将char
字段的长度指定为1,并且数据库正在使用基于代码页的字符映射,那么每个字符都表示为一个字节。
如果数据库例如设置为使用UTF-8存储字符,则每个字符将取一个字符到五个字节,具体取决于它是什么字符。
但是,char
数据类型相当陈旧,某些数据库实际上可能以与char(1)
字段相同的方式存储varchar(1)
字段。在这种情况下,字段也需要一个长度,因此它将占用至少一个或两个字节,具体取决于它是否存储在字段中的空间(将存储为空字符串),可能更多取决于数据库中。
答案 3 :(得分:1)
这取决于RDBMS系统以及如何定义列。你当然可以定义一个只需要一个字节的存储空间[在SQL Server中,它是CHAR(1)]。行标题的开销,空位掩码,可能索引uniquefication,以及许多其他的东西都会使事情变得复杂,但是,你应该能够创建一个宽度为一个字节的列。