[Мой] SQL VARCHAR Размер и Null-Termination

Отказ от ответственности: я очень новичок в SQL и базах данных в целом.


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

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


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

Ответы

Ответ 1

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

Ответ 2

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

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

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