Проблема с Varchar в Mysql 2147483647

Проблема с 2147483647 MYSQL.

При вставке 11-значного номера в поле телефона я получаю этот номер взамен сохраненным в DB: 2147483647

TEL установлен как VARCHAR, а не INT жесткий.

Кроме того, в базе данных, размещенной на SERVER 1, у меня точно такая же таблица базы данных, и у меня нет такой же сложной проблемы?! что может быть?

Это SQL и PHP

tel_no  varchar(20) utf8_general_ci  Yes    NULL
mob_no  varchar(20) utf8_general_ci  Yes    NULL

Это MYSQL. Да, я вставляю 11-значный номер в виде строки в БД

$telno = GetValue($post['tel_no']);
$mobno = GetValue($post['mob_no']); 

$sql = "UPDATE ".$this->dbpre."bookings SET tel_no='$telno', mob_no='$mobno'...

Не могли бы вы помочь? Схожу с ума!


person Chris Zammit    schedule 04.03.2013    source источник
comment
Возможный дубликат stackoverflow.com/questions /10255724/   -  person Hackerman    schedule 05.03.2013
comment
Не имеет смысла. Используете ли вы один и тот же интерфейс для приема номера телефона для тестирования обеих платформ? Всегда хорошо показать свой SQL.   -  person ron tornambe    schedule 05.03.2013
comment
Где-то у вас есть код, отличный от SQL, который извлекает столбец varchar и начинает обрабатывать его как целое число.   -  person nos    schedule 05.03.2013
comment
Вы говорите, что у вас есть VARCHAR(11), и вы вводите в него 11-значное число и получаете что-то еще? Может быть, это не MySQL, а ваш язык программирования, который не может обрабатывать 64-битные числа...?   -  person Ian    schedule 05.03.2013
comment
У меня нет такой же проблемы с другой базой данных, размещенной на другом сервере... это очень странно. Может это какие-то настройки сервера?   -  person Chris Zammit    schedule 05.03.2013
comment
Вы напечатали SQL ($sql), чтобы увидеть, в чем проблема: в PHP или в самой MySQL? Если проблема на самом деле в PHP, можете ли вы заставить $telno быть строкой, объединив пустую строку со значением из GetValue()? Приводит ли GetValue() числовое преобразование?   -  person Jonathan Leffler    schedule 05.03.2013


Ответы (3)


2147483647 — это наибольшее значение int для mysql. Просто измените тип с int на bigint.

person George    schedule 22.07.2013
comment
Хотя вы правы в том, что число является наибольшим (со знаком) значением int, ответ не меняется на bigint, ответ меняется с int на varchar, поскольку телефонные номера не могут быть правильно сохранены как целые числа (из-за неизвестных длин, префиксов если применимо, пробелы для форматирования и т. д.). - person N.B.; 22.07.2013
comment
спасибо @N.B. Я думаю, вы правы для международных номеров, особенно когда mysql_real_escape_string не используется. - person George; 22.07.2013


Решение: просто измените тип с int на bigint или varchar на bigint.

person lalna s m    schedule 09.10.2017