ограничить длину строки, установить максимальную длину строки - PullRequest
0 голосов
/ 29 января 2019

Я хочу ограничить имена пользователей длиной до 16 символов.

Я думал, что это будет работать:

create table user(id int unsigned auto_increment not null, username tinytext(16) not null, primary key (id));

, но это не

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(16) not null, primary key (id))' at line 1

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Просмотрите синтаксис типов данных здесь: 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).

0 голосов
/ 29 января 2019

Вот для чего varchar():

create table user(
    id int unsigned auto_increment not null,
    username varchar(16) not null,
    primary key (id)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...