Почему, если я создаю varchar (65535), я получаю средний текст? - PullRequest
15 голосов
/ 01 октября 2011

Средний текст и varchar (65535) - это одно и то же? Я имею в виду то, что они оба хранят данные непосредственно в таблице или в средне-текстовом типе хранится указатель? Я спрашиваю об этом, потому что, если я пытаюсь создать varchar (65535), он автоматически преобразуется в средний текст (если длина на самом деле больше 21811).


У меня есть еще один связанный вопрос:

У меня есть несколько полей в таблице, в которых я хочу хранить много символов (около 10 000). Но на самом деле он почти все время хранит не более 10 символов.

Итак, мой вопрос: нужно ли использовать текстовый или тип varchar (10000) для лучшей производительности?

Я считаю, что тип varchar больше подходит для этого случая.

Заранее спасибо за ваши ответы.

Редактировать

Я не понимаю, почему они говорят, что начиная с mysql 5.0.3 мы можем создать varchar (65535), но когда мы пытаемся это сделать, он конвертирует его в средний текст. Для меня разница между varchar и text (включая mediumtext) заключается в том, как они хранятся (используя указатель или нет). Так почему же они говорят, что мы можем создать varchar длиной 65535, если не можем?

Ответы [ 2 ]

12 голосов
/ 31 января 2012

Я отвечаю на свой вопрос:

Это потому, что я использую многобайтовый символ. Если вы используете сопоставление utf-8, вы не сможете создать varchar с более чем 21000 символов. Но если вы используете ASCII, вы будете.

7 голосов
/ 01 октября 2011

Согласно mysql.com, длина среднего текста составляет L + 3 байта.Для меня это означает, что если у вас есть пустое поле, оно будет 3 байта.Если у вас есть пустой varchar, длина этого поля будет 1 байт.

Здесь явно упоминается

До MySQL5.0.3, столбец VARCHAR со спецификацией длины, превышающей 255, преобразуется в наименьший тип TEXT, который может содержать значения данной длины.Например, VARCHAR (500) преобразуется в TEXT, а VARCHAR (200000) преобразуется в MEDIUMTEXT.Однако это преобразование влияет на удаление конечного пространства.

...