Что именно делает параметр в типе данных столбца? По существу:MySQL TINYINT (1) to BOOL
Я попробовал 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)'
);
и быстро стал полностью смущен, потому что я был не в состоянии хранить, отличных от 0 и 1 значений в столбце transaction_type.
После некоторого исследования я довольно уверенно определил, что параметр 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
Очень полезно - но вы можете думать о какой-либо причине, что он не будет ничего, кроме 0 или 1 магазин? Я думаю, что zerofill не изменил бы такого поведения – vroomfondel
+1 для супер полезных ссылок, но я не думаю, что вы вполне отвечаете мясу моего вопроса – vroomfondel