Я немного работал над приложением Facebook, но когда я зарегистрировал нового пользователя для проверки взаимодействия с другом, у нового пользователя появился uid ( 100000XXXXXXXXX
), который кажется большим для обработки php.
Сохранение числа в базе данных приводит к тому же значению ( 2147483647
). Я предполагаю, что это также ошибка PHP, так как я полагаю, что uid поместится в unsigned bigint?
Я не совсем уверен, куда идти отсюда, какие-то предложения?
Исправление состоит в том, чтобы всегда хранить UID как строку. Используйте VARCHAR
поля VARCHAR
в MySQL, и все будет в порядке.
В общем, многие гуру базы данных расскажут вам, что интерпретация внешних ключей другого приложения (например, UID в этом случае) плохо плоха, и вы должны обрабатывать их как непрозрачный текст.
Facebook рекомендует хранить его как BIGINT без знака.
Сведения о пользователе и соединения можно найти здесь .
Для PHP вы сохранили бы его как строку (потому что, в конечном счете, если вы собираетесь использовать его, он будет отображаться на странице или в данных JSON или что-то еще, что является жестким. Нет необходимости выполнять арифметику на это число).
Я использую BIGINT UNSIGNED для нескольких приложений, и все работает отлично.
В каком типе поля MySQL вы храните данные UID? Беззнаковый bigint может хранить до 18446744073709551615. (См. http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html)
Просто обновите свою схему через что-то вроде …
ALTER TABLE <table name> MODIFY COLUMN <column name> BIGINT UNSIGNED NOT NULL;
… и я подозреваю, что все будет хорошо.
NB: Вы захотите попробовать это в резервной копии, чтобы убедиться, что я не совсем прав. 🙂