2013-03-04 2 views
2

Наличие 2147483647 Проблема с MYSQL.Varchar issue on Mysql 2147483647

При вставке номер 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'... 

Помогите? Схожу с ума!

+1

Возможный дубликат http://stackoverflow.com/questions/10255724/incorrect-integer-2147483647-is-inserted-into-mysql – Hackerman

+0

Не имеет смысла. Используете ли вы тот же интерфейс, чтобы принять номер телефона для тестирования обеих платформ? Всегда хорошо показывать ваш SQL. –

+0

Где-то у вас есть не-SQL-код, который вытаскивает столбец varchar и начинает рассматривать его как целое. – nos

ответ

4

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

+2

Хотя вы правы, что число является наибольшим (подписанным) значением int, ответ не меняется на bigint, ответ меняется от int до varchar, так как номера телефонов не могут быть сохранены как целые числа правильно (из-за неизвестных длин, префиксы, если применимо, символы пробела для форматирования и т. д.). –

+0

спасибо @ N.B. Я думаю, вы правы для международных номеров, особенно когда [mysql_real_escape_string] (http://php.net/manual/en/function.mysql-real-escape-string.php) не используется. – George

-1

решение - >>> База данных: изменение типа из INT в BIGINT или VARCHAR в BIGINT.