Символ занимает 1 байт в базе данных? - PullRequest
6 голосов
/ 30 марта 2010

Занимает ли символ 1 байт в базе данных?

EDIT: Если я определю столбец как varchar (1), зарезервирует ли он мне 1 или 2 байта?

Ответы [ 4 ]

4 голосов
/ 30 марта 2010

зависит от того, что это за символ. если тип строки char / varchar, то 1 байт, если unicode: nchar / nvarchar, то, скорее всего, 2 байта.

2 голосов
/ 30 марта 2010

Char (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

1 голос
/ 30 марта 2010

Это зависит от системы СУБД и от того, как вы определяете столбец. Вы, безусловно, можете определить тот, который требует только одного байта дискового пространства [в SQL Server это будет CHAR (1)]. Накладные расходы на заголовки строк, нулевые битовые маски, возможно, индексацию uniquefication и множество других ошибок могут усложнить ситуацию, но да, вы должны иметь возможность создать столбец шириной в один байт.

1 голос
/ 30 марта 2010

Да, если вы укажете длину поля char как единицу, и база данных будет использовать сопоставление символов на основе кодовой страницы, чтобы каждый символ представлялся одним байтом.

Если база данных, например, настроена на использование UTF-8 для хранения символов, каждый символ будет занимать от одного до пяти байтов в зависимости от того, какой это символ.

Однако тип данных char довольно старый, некоторые базы данных могут фактически хранить поля char(1) так же, как поля varchar(1). В этом случае поле также будет нуждаться в длине, поэтому оно займет как минимум один или два байта в зависимости от того, будет ли это пространство, которое вы храните в поле (которое будет сохранено как пустая строка), возможно, больше, в зависимости от базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...