限制字符串长度,设置字符串列的最大长度

时间:2019-01-29 02:17:11

标签: mysql sql

我想将用户名的长度限制为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 :(得分:1)

varchar()的用途是

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

答案 1 :(得分:1)

在此处查看数据类型的语法: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的字符串。另一个示例是,如果您指定{{1 }},它将将该列提升为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 列仍将允许最多255个字节,而TINYTEXT列将最多允许16MB。指定的文本长度不是限制,而是需要哪种类型的准则。

如果您确实想将输入限制为16个字符,请使用MEDIUMTEXT

相关问题