char是否占用数据库中的1个字节?

时间:2010-03-30 18:46:09

标签: database database-design

char是否占用数据库中的1个字节?

编辑: 如果我将列定义为varchar(1),它会为我保留1或2个字节吗?

4 个答案:

答案 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

http://dev.mysql.com/doc/refman/5.1/en/char.html

答案 2 :(得分:1)

是的,如果您将char字段的长度指定为1,并且数据库正在使用基于代码页的字符映射,那么每个字符都表示为一个字节。

如果数据库例如设置为使用UTF-8存储字符,则每个字符将取一个字符到五个字节,具体取决于它是什么字符。

但是,char数据类型相当陈旧,某些数据库实际上可能以与char(1)字段相同的方式存储varchar(1)字段。在这种情况下,字段也需要一个长度,因此它将占用至少一个或两个字节,具体取决于它是否存储在字段中的空间(将存储为空字符串),可能更多取决于数据库中。

答案 3 :(得分:1)

这取决于RDBMS系统以及如何定义列。你当然可以定义一个只需要一个字节的存储空间[在SQL Server中,它是CHAR(1)]。行标题的开销,空位掩码,可能索引uniquefication,以及许多其他的东西都会使事情变得复杂,但是,你应该能够创建一个宽度为一个字节的列。