views:

93

answers:

4

Does a char occupy 1 byte in a database?

EDIT: If I define a column as varchar(1), will it reserve 1 or 2 bytes for me?

+4  A: 

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.

Andrey
+1  A: 

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.

Guffa
+1  A: 

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.

Philip Kelley
+2  A: 

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

PHP_Jedi