Значения вставляются в качестве 2147483647 в базе данных

все телефонные номера, которые я пытаюсь ввести в свою базу данных, вставляются как 2147483647.

поле базы данных-это integer(11).

перед вставкой номера телефона он проходит через следующий код, чтобы удалить все пробелы, тире и скобки:

if (!empty($hphone)) $phone = $hphone;
else if (!empty($HomePhone)) $phone = $HomePhone;
else if (!empty($Phone1)) $phone = $Phone1;
$phone = preg_replace("/[^0-9]/", "", $phone);

Почему он вставляет номер телефона как 2147483647 каждый раз, независимо от того, какой номер телефона?

2 ответов


Если вы можете преобразовать номер телефона в поле VARCHAR, не храните его как подписанное (или неподписанное) числовое значение (int, bigint, double и т. д...).

в этом случае предел для подписанного INT в MySQL 2147483647-это то, что вызывает вашу проблему. Все большее, вставленное в это поле, будет ограничено этим максимальным значением.

например, номер телефона 555-555-5555, если он больше этого предела (5555555555 >2147483647), как таковое хранение приведет к максимальное значение 2147483647.

Я также рекомендую не хранить его как большой INT или любой другой числовой тип. Как вы будете обрабатывать расширение или специальные закодированные символы, такие как:

   +02 112020 10020  
   1-333-232-9393 x203

BTW: не знаю, является ли первый реальный формат номера не в США, но вы получаете идею

кроме того, номера телефонов с соответствующими ведущими 0-х будет иметь некоторые из них не потеряли не важно, насколько большое число:

 021-392-9293

будет число 213929293


Если вы хотите сохранить его как число, используйте bigint, потому что int имеет максимальное значение, равное 2147483647.

поэтому любое число, которое вы пытаетесь сохранить выше 2147483647, будет сохранено как 2147483647.

вот некоторые ссылки для типов mysql:

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