MySql: Tinyint (2) проти tinyint (1) - у чому різниця?


183

Я знав булеву в mysql як tinyint (1).

Сьогодні я бачу таблицю з визначеним цілим числом, як tinyint(2), а також інші, як int(4), int(6)...

Що означає розмір у полі типу integer та tinyint?


4
Про типи даних MySQL Integer читайте тут .
Буд Дамянов

2
@ Відповідь AamirR правильна
evilReiko

1
@evilReiko zerofill також не має значення в тому, як зберігається значення, це дійсно про презентацію ... пробіли або нулі насправді не мають значення в правильності
чиєїсь

Відповіді:


94

Це означає ширину дисплея

Якщо ви використовуєте tinyint (1) або tinyint (2), це не має ніякого значення.

Я завжди використовую tinyint (1) та int (11), я використовував кілька клієнтів mysql (navicat, продовження pro).

ВСЕ це нічого не означає! Я провів тест, все вище клієнти або навіть клієнт командного рядка, здається, ігнорують це.

Але ширина відображення є найважливішою, якщо ви використовуєте ZEROFILLпараметр, наприклад, ваша таблиця має дві колонки:

TINYINT (2) ZEROFILL

B tinyint (4) zerofill

обидва стовпці мають значення 1, вихід для стовпця A буде 01і 0001для B , як видно на знімку нижче :)

нульове заповнення з шириною дисплея


20
Дивно подумав, що я щойно виявив, що в офіційному роз'ємі MySQL C # tinyint (1) ніколи не повертає значення, відмінні від 0 і 1. Це, мабуть, пов'язане з тим, що tinyint (1) автоматично визнається булевим. Іноді це має значення лише головою вгору.
Даніель Шарп

Хіба не краще використовувати цілий тип і довжину якомога менше? Я був під враженням, що ця збережена пам'ять у MySQL.
nclsvh

Як @ Daniel-Sharp вказує, це може здатися, що це стосується роз'ємів. Тільки що виникла проблема зі сплячим режимом, використовуючи JDBC-звітування, вона інтерпретувала TINYINT (1) як BIT.
sfj

2
@DanielSharp, що, ймовірно, пов'язано з опцією підключення tinyInt1isBit, яка за замовчуванням відповідає істинному. Дивіться dev.mysql.com/doc/connector-j/8.0/en/…
Parisbre56

1
Я завжди вважав, що це пов'язане з кількістю прийнятих чисел (наприклад, int (4), що не дозволяє нічого вище 9999). Здогадуюсь, я тоді завжди помилявся. І в командному рядку PHP, і в MySQL я бачу значення вище цього.
Джошуа Баккер

226

(m)Вказує ширину відображення стовпця; такі програми, як клієнт MySQL, використовують це під час показу результатів запиту.

Наприклад:

| v   | a   |  b  |   c |
+-----+-----+-----+-----+
| 1   | 1   |  1  |   1 |
| 10  | 10  | 10  |  10 |
| 100 | 100 | 100 | 100 |

Тут a, bі cвикористовують TINYINT(1), TINYINT(2)і TINYINT(3)відповідно. Як бачимо, він вводить значення з лівого боку за допомогою ширини дисплея.

Важливо зазначити, що це не впливає на прийнятий діапазон значень для конкретного типу, тобто TINYINT(1)все ще приймає [-128 .. 127].


16
що це означає "ширина стовпця" ??
realtebo

8
@realtebo в основному використовується клієнтом командного рядка mysql для цілей відображення.
Ja͢ck

3
Кількість "цифр", показаних інтерфейсом. Іншими словами, він буде розміщувати нулі зліва. Така особливість мала певний сенс у перші дні баз даних, але зараз це лише спадщина.
Denilson Sá Maia

2
@Kailas Якщо ви не використовуєте клієнта mysql? Взагалі жодної.
Ja͢ck

11
@Kailas Ні! tinyint (1) не приймає лише 0-9. Він приймає весь діапазон того, що може містити tinyint.
Ja͢ck

18
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tin3;
+----+------------+
| id | val        |
+----+------------+
|  1 | 0000000012 |
|  2 | 0000000007 |
|  4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)

mysql>

mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
|          10 |
+-------------+
1 row in set (0.01 sec)


mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
|     8 |
+-------+
1 row in set (0.00 sec)

11
Відредагуйте свою відповідь, щоб включити пояснення. Відповіді, що стосуються лише коду, дуже мало навчають майбутніх читачів ЗП. Ваша відповідь знаходиться в черзі на помірність, оскільки вона низька.
mickmackusa

14

Про INT, TINYINT ... Це різні типи даних, INT - це 4-байтне число, TINYINT - 1-байтове число. Більше інформації тут - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .

Синтаксис типу даних TINYINT - TINYINT (M), де M вказує максимальну ширину відображення (використовується лише у тому випадку, якщо ваш клієнт MySQL підтримує його).

Атрибути числового типу .


1
що це означає «ширина дисплея» !?
realtebo

2
З посилання - Наприклад, INT (4) задає INT із шириною відображення у чотири цифри. Ця необов'язкова ширина відображення може використовуватися програмами для відображення цілих значень, що мають ширину менше ширини, визначеної для стовпця, прокладаючи їх ліворуч пробілами.
Деварт

2
Але я не бачив програм або клієнтів MySQL, які використовують цю функцію. Я завжди використовую INT (11) і використовую функції форматування для налаштування виводу.
Devart
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.