2009-08-30 4 views
1

안녕하세요 저는 Int로 설정된 데이터베이스에 열이 있습니다.MySQL Int는 0을 제거합니다

그러나 내 데이터는 항상 0으로 시작하므로 새 레코드를 추가 할 때마다 0이 제거되고 첫 번째 문자는 어느 시점에서 1이되어야합니다.

이 문제를 어떻게 극복 할 수 있습니까?

VARCHAR를 사용하는 가장 좋은 방법은 PHP를 사용하여 유효성을 검사하는 것입니까? 나는 02118272을 입력하면

업데이트

은이 2118272.

+0

데이터 예제를 제공해주십시오. 지금은 어떻게 보이고 어떻게 보이게 할 수 있습니까? – Quassnoi

+4

이것은 데이터 문제가 아니라 프레젠테이션 문제입니다. 02118272 번호를 "표시"하고 싶지만 숫자는 여전히 2118272입니다. 사용자 인터페이스에서이를 수정해야합니다. –

답변

1

나는 당신이 그 필드에 VARCHAR 타입을 사용해야한다는 생각으로 데이터베이스에 저장됩니다. 당신은 숫자가 아닌 모든 문자를 삭제 이와

$var=preg_replace("/[^\d]/","",$var); 

을 다음 초기 0을 보존 DB에이 값을 넣을 수 있습니다 : 당신이 PHP에서 정수로 변수를 변환 할 경우, 당신은 단순히이 작업을 수행 할 수 있습니다.

+1

-1 숫자의 서식을 저장하면 서식에서 두 값을 구별 할 때 유용합니다. 예를 들어, 01은 1과 동일하지 않습니다. – JohnFx

+0

intval()을 사용하는 것이 더 쉽습니다. – SheperdOfFire

6

정수 7은 정수 000000000000000000000000007과 같습니다. 그들은 둘 다 ... 나중에 알지 .7. 데이터베이스에 저장되면 실제로는 000000000000000000000000007처럼 저장되지만 대부분의 MySQL 클라이언트는 모든 0을 표시하지 않습니다. 이 숫자의 특정 번호를 사용하여이 숫자를 표시하는 응용 프로그램에서 중요한 경우에는 str_pad() 기능을 사용하여 원하는대로

, 당신은 많은 선도적 인 0을 다시 추가 할 수 있습니다 : 여기

str_pad($your_string, 10, '0', STR_PAD_LEFT); 

10는 길이는 당신은 그 문자열을 원한다면 '0'은 그 길이를 만들기 위해 추가 될 문자이고, STR_PAD_LEFT은 문자열의 왼쪽에 문자를 추가한다고 말합니다.

한편 '007' 숫자는 기본적으로 숫자 '7'과 다른 경우 VARCHAR() 필드를 사용하여 저장해야합니다. 이들은 더 이상 정수가 아닙니다. 그들은 매우 다른 의미의 문자열입니다.

+0

데이터베이스에 10 진수로 저장되지 않았으므로 DB에 0이 오도록 주장하는 것은 잘못되었습니다. 즉,이 답변의 나머지 부분은 문제를 해결하는 올바른 방법입니다. –

+2

물론 데이터베이스에는 0이 붙습니다.숫자 7은'000000000000000000000000000111'으로 저장 될 것입니다. 29 개의 선행 0이있는 32 비트 정수입니다. 물론, 그것들은 ** 십진 ** 제로가 아니지만 개념은 완전히 동일합니다. – VoteyDisciple

3

데이터베이스에 저장해야하는 내용은 데이터입니다. 해당 데이터의 형식은 데이터베이스 자체가 아닌 응용 프로그램의 책임입니다.

정수로 저장하고 앞에 0이있는 소수점 7 자리가 필요한 경우 올바른 위치는 응용 프로그램에 데이터를 추출한 후입니다.