>当我在MySQL中创建一个表,将smallint指定为列,但随后使用show create table甚至mysqldump时,MySQL在smallint定义后添加了(5),如下所示。
我猜就数据而言,这并不重要,但是谁能解释为什么以及如果/如何阻止它这样做?
顺便说一句,我正在尝试更改现有数据库表以完全匹配新 sql 脚本的数据库表。我总是可以更改新的sql脚本,但如果可能的话,我更愿意更改现有表(考虑软件安装与软件升级)。
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`status` varchar(100) NOT NULL DEFAULT '',
`port` smallint unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SHOW CREATE TABLE test;
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`status` varchar(100) NOT NULL DEFAULT '',
`port` smallint(5) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
不,不能阻止SHOW CREATE TABLE
包含整数类型的显示宽度属性。
如果整数类型的列声明中不包含显示宽度的值,MySQL会为其提供默认值。 值 5 是 SMALLINT UNSIGNED
的默认值。
显示宽度对可以存储或检索的值没有任何影响。客户端应用程序可以使用该值来设置结果集的格式。
参考: http://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html
tMySQL只是设置列的(显示的)长度以匹配数据类型(最大值65535,五位数)。要更改此设置,您可以编写:
port
小 (3) 无符号 非空默认值 '0',
如果你愿意。
试试这个开始在你的表中添加值。
<mysql> CREATE TABLE test(
-> ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(100) NOT NULL
-> );>