2012-04-24 5 views
3

나는 이것을 간단하게하려고 노력할 것이다. MySQL 데이터베이스 테이블에서 BIGINT 데이터 유형을 사용하고 있습니다. 나는 12 자리에서 13 자리까지 오랫동안 걸칠 수있는 고유 한 난수를 생성하는 함수를 가지고있다.MySQL의 BIGINT는 내 번호를 변경합니까? 왜 이렇게합니까?

나는 길이가 12 자리 인 숫자로 데이터베이스에 삽입, 그것은, 그것은 잘

를 입력하지만 13 자리 이상 인 값을 사용할 때 반올림처럼 보인다 또는 어떤 것. 이 경우 하나, 그것은 약간 다른 번호를 삽입 일반적으로, 어떤 이유로 올림 : 여기

PHP

$defaultText = 'some string'; //just some string 
$web_id = 12; 
$element_id = 23112182735363; //case 1 (doesn't work) 
//$element_id = 2311218333205; //case 2, does work() 
    mysql_query("INSERT INTO tableName (web_id, element_id, content) 
    VALUES ($web_id, $element_id, '".mysql_real_escape_string($defaultText)."')"); 

결과입니다.

두 경우에는 숫자를 잘 삽입합니다! 어쩌면 누군가가이 수수께끼에 대해 밝힐 수 있습니다! 다시 한 번 감사드립니다!

큰 INT의 데이터 형식 :

bigint(200) 
+0

브래킷 번호는 표시 목적으로 만 사용됩니다. MySQL이 표시해야하는 자릿수입니다. 내부적으로 스토리지 요구 사항에는 전혀 영향을 미치지 않습니다. bigint는 항상 64 비트이므로 최대 20 자리까지 사용할 수 있습니다. 20 개 이상의 숫자를 가질 수없는 숫자에 200 자릿수를 표시하도록 MySQl을 알려주는 것이 무의미합니다. –

답변

8

숫자는 이후 PHP_INT_MAX에서 자신의 정밀도를 잃게됩니다. 참고 : http://www.php.net/manual/en/reserved.constants.php#constant.php-int-max

그 이후에는 정밀도가 제한되어 이상한 반올림 문제를 일으키는 부동 소수점으로 변환됩니다. PHP에서 BIGINT를 지원하는 유일한 방법은 문자열을 사용하는 것입니다.

+0

고마워요. 저도 같은 문제로 다른 사람을 도와 주길 바랍니다. 나는 그것을 문자열로 바 꾸었습니다. –

1

나는 당신이 32 비트 서버에 대해 이야기하고 있다고 가정했다. 하지만 내 서버에서 PHP는 정확성을 잃지 않는 것처럼 보였습니다. 9223372036854775807<br/>-6174803190685607000<br/>

echo(PHP_INT_MAX . "<br/>"); $big_int = -6174803190685607000; echo($big_int . '<br/>'); 출력은 슬프게도 난 여전히 정밀 패배를 얻었다. 나는 mysqli의 준비 문구에 'i'를 사용했기 때문에 그것을 추측 할 수는 있었지만 그것을 증명할 수는 없었다.

+0

답변 해 주셔서 감사 드리며 저에게 전화하지 마십시오. ;) –