В чем проблема с 10-значный мобильный нет данных в MySQL? - PullRequest
2 голосов
/ 27 сентября 2011

Я сделал таблицу для хранения контактной записи пользователя моего сайта.Он также содержит 10-значный номер мобильного телефона *

Структура таблицы выглядит следующим образом:

CREATE TABLE contact_user
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
contact INT(10)
)

Теперь проблема заключается в том, что если я вставлю 10 мобильный номер (например, 9595891256), используя phpmyadmin в контактполе вставит случайное значение и отобразит предупреждение «данные вне диапазона столбцов»

Но если я вставлю простое 10-значное число (например, 4561327894), то оно будет работать хорошо, и предупреждение не будет отображаться.

ТАК, скажите, пожалуйста, в чем заключается проблема при вставке номера мобильного телефона в этом столбце?

Я использую mysql 5.1 в Ubuntu 11.04, а также phpmyadmin.

Ответы [ 3 ]

7 голосов
/ 27 сентября 2011

INT (10) не означает 10-значное число, это означает целое число с шириной отображения 10 цифр.Независимо от того, введете ли вы INT (2) или INT (10), MySQL по-прежнему сохраняет только (без знака, в данном случае) INT с максимальным значением 4294967295.

Вы можете использовать BIGINT вместо INT для храненияэто как числовое.Я не рекомендовал бы это, однако, потому что это не позволит для международных номеров.Если вы уверены, что ваше приложение будет использовать только номера США, использование BIGINT сэкономит вам 3 байта в строке по сравнению с VARCHAR (10) - если вас это касается.

Поскольку это номер телефона (ипоэтому вы не будете делать числовые вычисления против него), попробуйте использовать VARCHAR (20).Это позволяет вам правильно хранить международные телефонные номера в случае необходимости.

4 голосов
/ 27 сентября 2011

Максимальное значение для INT в MySQL составляет 2147483647 (или 4294967295, если оно не подписано), согласно документации MySQL .Если ваше значение превысит этот предел, целое число будет переполнено, следовательно, это не случайное значение.

Кроме того, INT - не лучшее решение для хранения телефонных номеров.Вы можете потерять лидирующие нули, если они равны одному или нескольким.Кроме того, международные телефонные номера начинаются со знака +.Подумайте об использовании VARCHAR.В итоге это займет больше места в базе данных, но обеспечит большую согласованность.

2 голосов
/ 27 сентября 2011

. Из-за максимального размера типа INT вам нужно использовать другой тип для хранения такого большого числа.Попробуйте использовать BIGINT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...