MySQL Boolean "tinyint (1)" содержит значения до 127? - PullRequest
37 голосов
/ 09 декабря 2010

Я хотел создать поле true / false, если товар есть в наличии.

Я хотел установить для него значение Boolean (которое преобразуется в tinyint(1)), 1 для наличия на складе, 0 длянет на складе.

Я получаю каналы от продавцов, поэтому я подумал про себя: «Что если они передадут, сколько есть на складе?»

Так что мне стало интересно, вставлю ли я число больше 1, что произойдет.Я предполагал, что по умолчанию это будет 1.

К моему удивлению, это позволит мне держать любое число до 127, что угодно, по умолчанию до 127.

Кто-нибудь может объяснить почему?

Ответы [ 4 ]

57 голосов
/ 09 декабря 2010

Тип данных со знаком TINYINT может хранить целочисленные значения в диапазоне от -128 до 127.

Однако TINYINT(1) не меняет минимальное или максимальное значение, которое может хранить. отображает только одну цифру, когда значения этого типа печатаются как выходные.

7 голосов
/ 09 декабря 2010

Тип данных tinyint использует 1 байт памяти. 256 возможных целочисленных значений могут быть сохранены с использованием 1 байта (от -128 до 127). если вы определяете как tinyint unsigned, тогда отрицательные значения отбрасываются, поэтому их можно сохранить (от 0 до 255).

6 голосов
/ 09 декабря 2010

См. здесь , чтобы узнать, как MySQL справляется с этим.Если вы используете MySQL> 5.0.5, вы можете использовать BIT в качестве типа данных (в старых версиях BIT будет интерпретироваться как TINYINT(1). Однако (1) -часть - это только ширина экрана, а не внутренняя длина.

0 голосов
/ 19 июня 2018
CREATE TABLE foo_test(
col_1 TINYINT
, col_2 TINYINT(2) 
, col_3 TINYINT(3) 
, col_4 TINYINT(2) ZEROFILL
, col_5 TINYINT(3) ZEROFILL
);

INSERT INTO foo_test( col_1,col_2,col_3,col_4,col_5 )
SELECT 1, 1,1,1,1
UNION ALL
SELECT 10, 10,10,10,10
UNION ALL
SELECT 100, 100,100,100,100;

SELECT * FROM foo_test; 

**OUTPUT:-**   
 col_1   col_2   col_3   col_4   col_5  
------  ------  ------  ------  --------
     1       1       1      01       001
    10      10      10      10       010
   100     100     100     100       100

MySQL покажет 0 в начале, если zerofill используется при создании таблицы. Если вы не использовали zerofill , то он не эффективен.

...