当我在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
答案 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',
如果你愿意的话。