Ответ 1
Я отвечаю на свой вопрос:
Это потому, что я использую многобайтовый символ. Если вы используете сортировку utf-8, вы не сможете создать varchar с более чем 21000 символов. Но если вы используете ascii, вы будете.
Значит ли средний текст и varchar (65535) одно и то же? Что я имею в виду здесь: они оба хранят данные непосредственно в таблице, или тип mediatext хранит указатель? Я спрашиваю об этом, потому что, если я попытаюсь создать varchar (65535), он автоматически преобразуется в средний текст (если длина больше, чем 21811).
У меня есть другой связанный с этим вопрос:
У меня есть несколько полей в таблице, которые я хочу, чтобы хранить много символов (около 10 000). Но на самом деле он почти все время будет хранить не более 10 символов.
Итак, мой вопрос: нужно ли использовать текст или тип varchar (10000) для лучшей производительности?
Я считаю, что тип varchar более подходит для этого случая.
Заранее благодарим за ваши ответы.
То, что я не понимаю, это то, почему они говорят, что с mysql 5.0.3 мы можем создать varchar (65535), но когда мы попытаемся это сделать, он преобразует его в среду контекста. Для меня разница между varchar и text (mediumtext include) заключается в том, как они хранятся (используя указатель или нет). Так почему же они говорят, что мы можем создать varchar длиной 65535, если мы не сможем?
Я отвечаю на свой вопрос:
Это потому, что я использую многобайтовый символ. Если вы используете сортировку utf-8, вы не сможете создать varchar с более чем 21000 символов. Но если вы используете ascii, вы будете.
В соответствии с mysql.com длина медиатекста равна L + 3 байтам. Для меня это означает, что если у вас пустое поле, это будет 3 байта. Если у вас пустой varchar, длина этого поля будет 1 байт.
Здесь четко указано
До MySQL 5.0.3 столбец VARCHAR со спецификацией длины более 255 преобразуется в наименьший тип ТЕКСТА, который может содержать значения данной длины. Например, VARCHAR (500) преобразуется в TEXT и VARCHAR (200000) преобразуется в MEDIUMTEXT. Однако это преобразование влияет на удаление конечного пространства.