开发者

Does a char occupy 1 byte in a database?

Does a char occupy 1 byte in a database?

EDIT: If I define a column as var开发者_如何学Cchar(1), will it reserve 1 or 2 bytes for me?


Char(k) takes k-bytes no matter what the value is, varchar(k) n+1 bytes, where n = number of chars in the value, but max k+1 bytes

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


depends on what kind of char is it. if type of string is char/varchar then 1 byte if unicode: nchar/nvarchar then most probably 2 bytes.


It depends on the RDBMS system, and how you define the column. You certainly could define one that only requires one byte of storage space [in SQL Server, it'd be CHAR(1) ]. Overhead for row headers, null bitmasks, possibly indexing uniquefication, and lots of other cruft can complicate things, but yeah, you should be able to create a column that's one byte wide.


Yes, if you specify the length of the char field as one, and the database is using a codepage based character mapping so that each character is represented as one byte.

If the database for example is set up to use UTF-8 for storing characters, each character will take anything from one to five bytes depending on what character it is.

However, the char data type is rather old, some databases may actually store a char(1) fields the same way as a varchar(1) field. In that case the field will also need a length, so it will take up at least one or two bytes depending on whether it's a space that you store in the field (which will be stored as an empty string), maybe more depending on the database.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜