Почему, если я создаю varchar (65535), я получаю средний текст?

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


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

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

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

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

Заранее благодарим за ваши ответы.

Изменить

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

Ответы

Ответ 1

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

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

Ответ 2

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

Здесь четко указано

До MySQL 5.0.3 столбец VARCHAR со спецификацией длины более 255 преобразуется в наименьший тип ТЕКСТА, который может содержать значения данной длины. Например, VARCHAR (500) преобразуется в TEXT и VARCHAR (200000) преобразуется в MEDIUMTEXT. Однако это преобразование влияет на удаление конечного пространства.