MySQL将(num)添加到smallint列

时间:2015-04-23 02:48:36

标签: mysql

当我在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

2 个答案:

答案 0 :(得分:2)

不,您无法阻止using namespace System::ComponentModel; // For ComponentResourceManager using namespace System::Media; // For SoundPlayer using namespace System::IO; // For MemoryStream 包含整数类型的显示宽度属性。

如果显示宽度的值未包含在整数类型的列声明中,则MySQL会为其提供默认值。值 5 SHOW CREATE TABLE的默认值。

显示宽度对可以存储或检索的值没有任何影响。客户端应用程序可以使用该值来格式化结果集。

参考:http://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html

答案 1 :(得分:0)

tMySQL只是设置列的(显示的)长度以匹配他的数据类型(最大值65535,五位数)。要更改此信息,您可以写:

port smallint(3)unsigned NOT NULL DEFAULT'0',

如果你愿意的话。