【发布时间】:2013-08-09 08:43:21
【问题描述】:
列的数据类型上的参数究竟有什么作用?本质上:
我尝试了 TINYINT(1),它似乎只包含 1 或 0。为什么它不显示/存储至少 0-9?
编辑:事实证明,这个问题不是 MySQL 问题,而是 CakePHP 出乎意料的行为。详细阅读我的答案。我将原始问题保留在下面,因此有用的答案仍然有意义。
我做了什么:
我使用命令创建了一个 MySQL 表
CREATE TABLE table_name (
... irrelevant columns
transaction_type TINYINT(1) NOT NULL COMMENT 'identifier from 0-5 (for now)'
);
很快就彻底糊涂了,因为我无法在 transaction_type 列中存储除 0 和 1 之外的值。
经过一番研究,我相当自信地确定TINYINT(或任何其他整数数据类型)的参数只不过是字符的显示宽度。我理解这意味着两件事:
- 它应该仍然存储整个插入的值,只要它在 TINYINT 的范围内
- 它只会显示一个字符,所以当我从表格中选择时,我应该能够看到值 0-9。
我认为这些假设中至少有一个(或者我对参数的整体理解)一定是错误的,因为每当我尝试在该列中插入一个大于 1 的值时,它都会显示 1。
然后我尝试了:
ALTER TABLE table_name CHANGE transaction_type transaction_type TINYINT;
我突然能够插入我想要的任何值。然而,即使上面的命令改变了整个表,之前插入的值仍然是 1,让我怀疑它们真的存储为 1。
我误解了显示宽度,还是我完全做错了什么?
除此之外:如果我不关心整数列在表中的外观,是否有任何理由为整数列提供参数?即 INT(11) 是否比 INT 更好?
一个可能对我更有帮助的类似问题: MySql: Tinyint (2) vs tinyint(1) - what is the difference?
我能找到解释显示宽度的最清晰来源:http://matt.thomm.es/archive/2006/11/28/mysql-integer-columns-and-display-width
【问题讨论】:
标签: mysql