我想将用户名的长度限制为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
答案 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
。