#mysql #text #varchar
#mysql #текст #varchar
Вопрос:
mediumtext и varchar(65535) — это одно и то же? Я имею в виду, что они оба хранят данные непосредственно в таблице или тип mediumtext хранит указатель? Я спрашиваю об этом, потому что, если я попытаюсь создать varchar(65535), он автоматически преобразуется в mediumtext (если длина на самом деле больше 21811).
У меня есть еще один связанный с этим вопрос, который:
У меня есть несколько полей в таблице, в которых я хочу иметь возможность хранить много символов (около 10 000). Но на самом деле он почти все время будет хранить не более 10 символов.
Итак, мой вопрос в том, нужно ли мне использовать тип text или varchar(10000) для лучшей производительности?
Я считаю, что тип varchar более подходит для этого случая.
Заранее спасибо за ваши ответы.
Редактировать
Я не понимаю, почему они говорят, что начиная с mysql 5.0.3 мы можем создать varchar(65535), но когда мы пытаемся это сделать, он преобразует его в mediumtext. Для меня разница между varchar и text (включая mediumtext) заключается в том, как они хранятся (с использованием указателя или нет). Так почему они говорят, что мы можем создать varchar с длиной 65535, если мы не можем?
Комментарии:
1. google? dev.mysql.com/doc/refman/5.1/en/storage-requirements.html
Ответ №1:
Я отвечаю на свой собственный вопрос:
Это потому, что я использую многобайтовый символ. Если вы используете сопоставление utf-8, вы не сможете создать varchar примерно с более чем 21000 символами. Но если вы используете ascii, вы получите.
Комментарии:
1. Ага! Это имеет смысл, разделите ограничение строки в байтах на три. Спасибо. (Просто убедитесь, что ваша строка UTF-8 содержит только символы UCS-2 😉 … Вау, MySQL 5.5 и далее уже учитывает это, см. dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
2. Обратите внимание на одну деталь: ограничение 65535 — это не только ограничение Varchar. Это ограничение на размер всей записи. Это означает, что если у вас есть только один Varchar в таблице, вы можете перейти к (65535-3) / 3 = 21844 символа. Но на самом деле вы не сможете перейти к 21844, поскольку другие поля также используют часть доступных 65535 байт.
Ответ №2:
Согласно mysql.com длина mediumtext составляет L 3 байта. Для меня это означает, что если у вас есть пустое поле, оно будет 3 байта. Если у вас пустой varchar, длина этого поля будет равна 1 байту.
Здесь четко указано
До MySQL 5.0.3 столбец VARCHAR со спецификацией длины, превышающей 255, преобразуется в наименьший текстовый тип, который может содержать значения заданной длины. Например, VARCHAR(500) преобразуется в ТЕКСТ, а VARCHAR(200000) преобразуется в MEDIUMTEXT. Однако это преобразование влияет на удаление конечного пробела.