MySql : Tinyint (2) vs tinyint (1)-차이점은 무엇입니까?


183

나는 mysql에서 부울을로 알고 있었다 tinyint (1).

오늘 같은 정의 정수있는 테이블을 참조 tinyint(2)하고, 또한 다른 사람이 좋아 int(4), int(6)...

integer 및 tinyint 유형의 필드에서 크기는 무엇을 의미합니까?


4
MySQL Integer 데이터 형식에 대한 내용은 여기를 참조하십시오 .
Bud Damyanov

2
@ AamirR의 대답은 올바른입니다
evilReiko

1
@evilReiko zerofill은 또한 값이 저장되는 방식에 차이를 만들지 않습니다. 프레젠테이션에 관한 것입니다 ... 공백이나 0은 실제로 모든 사람의 대답의 정확성에 차이를 만들지 않습니다
Ja͢ck

답변:


94

디스플레이 너비를 의미 합니다

tinyint (1)를 사용하든 tinyint (2)를 사용하든 차이가 없습니다.

나는 항상 tinyint (1)와 int (11)를 사용하고 여러 mysql 클라이언트 (navicat, sequel pro)를 사용했습니다.

전혀 의미가 없습니다! 테스트를 실행했는데 위의 모든 클라이언트 또는 명령 줄 클라이언트는이를 무시하는 것 같습니다.

그러나 옵션 을 사용하는 경우 표시 너비 가 가장 중요합니다. ZEROFILL예를 들어 테이블에 다음 2 개의 열이 있습니다.

TINYINT (2) ZEROFILL

B tinyint (4) 제로 필

두 열은 1의 값을 가지며, 열을위한 출력 A는010001B , 스크린에서 볼 때 아래 :)

표시 폭이 0으로 채워짐


20
이상하게도 필자는 C # 공식 MySQL 커넥터에서 tinyint (1)이 0과 1과 다른 값을 반환하지 않는다는 것을 발견했습니다. 이것은 tinyint (1)이 자동으로 부울로 인식되는 것과 관련이 있습니다. 때로는 중요합니다.
Daniel Sharp

정수형과 길이를 가능한 작게 사용하는 것이 좋지 않습니까? MySQL에서 메모리가 절약되었다는 인상을 받았습니다.
nclsvh

@ Daniel-Sharp가 지적했듯이 커넥터에 중요 할 수 있습니다. JDBC를 사용하는 Hibernate에 문제가 있었기 때문에 TINYINT (1)을 BIT로 해석했습니다.
sfj

2
@DanielSharp 아마도 연결 옵션 tinyInt1isBit 때문일 것입니다. 기본값은 true입니다. 참조 dev.mysql.com/doc/connector-j/8.0/en/...
Parisbre56

1
나는 항상 이것이 받아 들여지는 숫자의 양과 관련이 있다고 생각했습니다 (예를 들어, int (4)는 9999보다 큰 것을 허용하지 않습니다). 내가 항상 잘못 생각했던 것 같아 PHP와 MySQL 명령 줄에서 나는 위의 값을 잘 볼 수 있습니다.
Joshua Bakker

226

(m)열 디스플레이 폭을 나타내고; MySQL 클라이언트와 같은 애플리케이션은 쿼리 결과를 표시 할 때이를 사용합니다.

예를 들면 다음과 같습니다.

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

여기서 a, bc사용 TINYINT(1), TINYINT(2)TINYINT(3)각각. 보시다시피, 디스플레이 너비를 사용하여 왼쪽의 값을 채 웁니다.

특정 유형에 대해 허용되는 값의 범위에 영향을 미치지 않습니다 (예 : TINYINT(1)여전히 accepts) [-128 .. 127].


16
'열 너비'란 무엇입니까 ??
realtebo

8
@realtebo 주로 mysql 명령 행 클라이언트에서 표시 목적으로 사용됩니다.
Ja͢ck

3
인터페이스가 표시하는 "숫자"수입니다. 즉, 왼쪽에서 0을 채 웁니다. 이러한 종류의 기능은 초기 데이터베이스에서 의미가 있었지만 이제는 레거시입니다.
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
설명을 포함하도록 답변을 수정하십시오. 코드 전용 답변은 향후 SO 독자를 교육하는 데 거의 도움이되지 않습니다. 귀하의 답변은 품질이 낮다는 평가 대기열에 있습니다.
mickmackusa

14

INT, TINYINT 정보 ... 이들은 다른 데이터 형식이며 INT는 4 바이트 숫자이고 TINYINT는 1 바이트 숫자입니다. 더 많은 정보는 여기 에서-INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .

TINYINT 데이터 형식의 구문은 TINYINT (M)입니다. 여기서 M은 최대 디스플레이 너비를 나타냅니다 (MySQL 클라이언트가 지원하는 경우에만 사용).

숫자 유형 속성 .


1
'디스플레이 너비'는 무엇을 의미합니까?!
realtebo

2
참조에서-예를 들어, INT (4)는 표시 너비가 4 자리 인 INT를 지정합니다. 이 선택적 표시 너비는 응용 프로그램에서 공백으로 왼쪽 패딩하여 열에 지정된 너비보다 작은 정수 값을 표시하는 데 사용될 수 있습니다.
Devart

2
그러나이 기능을 사용하는 응용 프로그램이나 MySQL 클라이언트는 보지 못했습니다. 나는 항상 INT (11)을 사용하고 형식화 함수를 사용하여 출력을 사용자 정의합니다.
Devart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.