[mysql] MySQL에서 zerofill의 이점은 무엇입니까?

난 그냥 정의의 이익 / 사용 무엇을 알고 싶어 ZEROFILL위한 INT에서 데이터 형식은 MySQL?

`id` INT UNSIGNED ZEROFILL NOT NULL 



답변

유형 ZEROFILL이 있는 열을 선택 하면 열 정의에 지정된 표시 너비까지 필드의 표시된 값을 0으로 채 웁니다. 표시 너비보다 긴 값은 잘리지 않습니다. 의 사용은 ZEROFILL또한 의미합니다 UNSIGNED.

사용 ZEROFILL및 표시 너비는 데이터 저장 방법에 영향을 미치지 않습니다. 표시 방법에만 영향을줍니다.

다음은 사용법을 보여주는 SQL의 예입니다 ZEROFILL.

CREATE TABLE yourtable (x INT(8) ZEROFILL NOT NULL, y INT(8) NOT NULL);
INSERT INTO yourtable (x,y) VALUES
(1, 1),
(12, 12),
(123, 123),
(123456789, 123456789);
SELECT x, y FROM yourtable;

결과:

        x          y
 00000001          1
 00000012         12
 00000123        123
123456789  123456789


답변

이해하기 위해 하나의 예를 들어, 사용법 ZEROFILL이 흥미로울 수 있습니다.

독일에는 5 자리 우편 번호가 있습니다. 그러나 이러한 코드는 0으로 시작할 수 있으므로 80337munic의 유효한 우편 01067번호이며 베를린의 우편 번호입니다.

보시다시피 독일 시민은 우편 번호가 5 자리 코드로 표시되기를 기대하므로 1067이상하게 보입니다.

이러한 데이터를 저장하기 위해 VARCHAR(5)또는 0을 사용하는 INT(5) ZEROFILL정수에는 두 가지 큰 장점이 있습니다.

  1. 하드 디스크의 적은 저장 공간
  2. 삽입 1067하면 여전히 01067돌아옵니다.

이 예는의 사용법을 이해하는 데 도움이 될 수 있습니다 ZEROFILL.


답변

정사각형 상자를 좋아하는 혼란스러운 인물을위한 기능입니다.

당신은 삽입

1
23
123 

그러나 선택하면 값이 채워집니다.

000001
000023
000123


답변

이 “정수”를 “텍스트”로 정렬해야하는 다른 항목 (다른 숫자 또는 텍스트)과 연결 해야하는 경우 올바른 정렬에 도움이됩니다 .

예를 들어

A-005 또는 10/0005로 연결된 정수 필드 번호 (5)를 사용해야하는 경우


답변

나는 파티에 늦었다는 것을 알고 있지만 zerofill은 TINYINT (1)의 부울 표현에 도움이된다는 것을 알았습니다. 널이 항상 거짓을 의미하는 것은 아니며 때로는 원하지 않는 경우도 있습니다. tinyint를 0으로 채우면 해당 값을 INT로 효과적으로 변환하고 상호 작용시 발생할 수있는 혼란을 제거 할 수 있습니다. 그런 다음 응용 프로그램은 기본 데이터 유형 True = Not (0)과 유사한 방식으로 해당 값을 처리 할 수 ​​있습니다


답변

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)


답변

선택적 (비표준) 속성 ZEROFILL과 함께 사용하면 공백의 기본 패딩이 0으로 바뀝니다. 예를 들어, INT (4) ZEROFILL로 선언 된 열의 경우 값 5는 0005로 검색됩니다.

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html