2009-08-13 2 views
13

Отказ от ответственности: Я очень новичок в SQL и базах данных в целом.[Мой] SQL VARCHAR Размер и Null-Termination


Мне нужно создать поле, в котором будет храниться максимум 32 символа текстовых данных. Does "VARCHAR(32)" означает, что у меня есть ровно 32 символов для моих данных? Нужно ли мне резервировать дополнительный символ для нулевого завершения?

Я провел простой тест, и кажется, что это буфер WYSIWYG. Однако я хотел получить конкретный ответ от людей, которые действительно знают, что они делают.


У меня есть фон C [++], поэтому этот вопрос поднимает тревожные звонки в моей голове.

ответ

24

Да, у вас есть 32 персонажа. SQL не относится к nul оканчивающимся строкам, как это делают некоторые языки программирования.

+0

Спасибо, это облегчение. – 2009-08-13 18:58:15

1

Ваш размер спецификации VARCHAR - это максимальный размер ваших данных, поэтому в этом случае 32 символа. Однако VARCHARS являются динамическим полем, поэтому фактическое физическое хранилище используется только размером ваших данных, плюс один или два байта.

Если вы поместите 10-значную строку в VARCHAR (32), физическое хранилище будет равно 11 или 12 байтам (руководство сообщит вам точную формулу).

Однако, когда MySQL имеет дело с наборами результатов (то есть после SELECT), 32 байта будут выделены в памяти для этого поля для каждой записи.

+0

+1 для объяснения выделения памяти при выборе поля. Интересно, как это работает с полями TEXT и BLOB ... – Leonel