Просмотрите синтаксис типов данных здесь: https://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html
TINYTEXT
не принимает аргумент длины.
TEXT
принимает аргумент длины, но это не такчто ты думаешь это делаетОн просто меняет тип данных на один из вариантов TEXT
, который является наименьшим типом, который позволит по крайней мере запрашиваемую длину.
Как указано на странице руководства:
Для этого типа может быть указана дополнительная длина M.Если это будет сделано, MySQL создаст столбец как наименьший тип TEXT, достаточно большой для хранения значений длиной M символов.
Таким образом, TEXT(16)
создаст столбец как TINYTEXT
, поскольку это наименьшее изсемейство TEXT
типов, которые будут содержать строки длиной 16. Другой пример, если вы укажете TEXT(2000000)
, столбец будет переведен в MEDIUMTEXT
.
mysql> create table t ( t1 text(16), t2 text(2000000) );
Query OK, 0 rows affected (0.04 sec)
mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`t1` tinytext,
`t2` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
Обратите внимание, что столбцы были автоматически изменены, и у них больше нет спецификаторов длины.
Это означает, что столбец TINYTEXT
по-прежнему будет содержать до 255 байтов, а MEDIUMTEXT
колонка позволит до 16 МБ.Указанная длина текста не является пределом, а указанием того, какой тип текста необходим.
Если вы действительно хотите ограничить ввод до 16 символов, используйте VARCHAR(16)
.