2011-01-29 4 views

답변

4

수 없습니다. (비주얼의 표현으로)

varchar 필드를 사용하여 선행 0을 저장하려고 시도하는 대신 정수를 (또는 무엇이든) 정수 형식으로 저장하십시오. 필요한 형식의 문자열.

실제로 도메인 모델 (예 : 전화 번호)에 문자열 인 것을 저장해야하는 경우 정수 유형 필드가 아닌 문자열을 사용하십시오.

+2

이상하게 여기지만, 앤드류 무어의 대답은 똑같은 말을 할 때 두번 upvoted되었습니다. –

+0

@Andrew - ZEROFILL은 시각적 인 방식으로 정확하게 수행합니다. 심지어 최종 결과가 0으로 채워지는 PHP와의 콤보도 있습니다. OP의 다른 질문을 확인하십시오. – RichardTheKiwi

1

는 데이터를 숫자로 저장하고 055555555555555555555은 같은 번호입니다. 선행 0을 유지하려면 문자열 유형이 필요합니다. 적당한 최대 길이 인 varchar.

-2

필드를 변경하여 UNSIGNED ZEROFILL을 (를) 사용하도록 살펴볼 수 있습니다. 이렇게하면 앞에 오는 0이있는 번호를 저장할 수 있습니다.

+0

-1 :'ZEROFILL'은 선행 제로를 저장할 수 없습니다. DBMS에게 길이보다 정의가 작 으면 결과에 0을 추가하도록 DBMS에 지시합니다. –

+0

@cyberkiwi : 왜 중요합니까? 왜냐하면 그것은 단지 렌더링의 문제 일 뿐이므로 OP가 단순히 다른 곳에 남겨 두었을 것이라고 확신합니다. 나는 여기에 앞의 0들 (그리고 그 양)이 데이터의 무결성에 중대한 의미를 갖는 데이터를 저장하는 것이 확실하다. –

+2

@cyberkiwi : downvote는 의견입니다. 제 생각에는'ZEROFILL '을 사용하는 것이 대답이 아니라는 것입니다. –

2

BIGINT 다른 정수 열은 다수의 시각적 표현, 바이너리 형태 수만 자체 (BIGINT 8 바이트)에 저장하지 않는다. 5555555555는 다음과 같이 저장됩니다 앞의 0을 데이터의 무결성에 중요한 경우

00000000 00000000 00000000 00000001 01001011 00100011 00001100 11100011

, 당신은 VARCHAR 또는 그 대신 정수 유형의 CHAR를 사용한다. 숫자 데이터 유형은 숫자 데이터에 대해서만 사용해야합니다. 미국 우편 번호 코드와 전화 번호는 숫자 데이터가 아닙니다.

-1

문제가 있다면 수십만 개의 행을 가진 큰 데이터베이스 인 bigint는 VARHAR 필드보다 훨씬 빠릅니다. 유럽의 문서 번호 (EAN)로 가득 찬 제품 데이터베이스와 비슷한 문제가 있습니다. 그 코드 중 일부는 맨 앞에서 시작합니다. 0 VARCHAR로 변경하면 EAN 코드를 검색하는 특정 페이지를로드하는 데 8 초가 걸립니다. BIGINT로 2 초가됩니다. 실제로 속도의 큰 차이.

관련 문제