Как работать с новыми размерами UID на Facebook? - PullRequest
4 голосов
/ 16 ноября 2009

Я немного поработал над приложением Facebook, но когда я зарегистрировал нового пользователя, чтобы проверить взаимодействие с другом, у нового пользователя появился uid (100000XXXXXXXXX), который кажется большим для php.

Сохранение номера в базе данных приводит к тому же значению (2147483647). Я предполагаю, что это также ошибка PHP, так как я полагаю, что uid поместится в беззнаковый bigint?

Я не совсем уверен, куда идти отсюда, какие-либо предложения?

Ответы [ 4 ]

9 голосов
/ 16 ноября 2009

Исправление заключается в том, чтобы хранить UID в виде строки всегда. Используйте тип поля VARCHAR в MySQL, и все будет в порядке.

В общем, многие гуру баз данных скажут вам, что интерпретация внешних ключей другого приложения (например, UID в данном случае) плохо плохо плохо и вы должны обрабатывать их как непрозрачный текст.

6 голосов
/ 16 ноября 2009

Facebook рекомендует хранить его как BIGINT без знака.

User детали объекта и связи можно найти здесь .

Для PHP вы бы сохранили его в виде строки (потому что, в конечном итоге, если вы собираетесь его использовать, он будет отображаться на странице или в данных JSON или что-то еще, что является строковым. На самом деле в этом нет необходимости. выполнить арифметику с этим числом).

1 голос
/ 16 ноября 2009

Я использую BIGINT UNSIGNED для пары приложений, и все работает просто отлично.

0 голосов
/ 16 ноября 2009

В каком поле 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. Вы можете попробовать это на резервной копии, чтобы убедиться, что я не ошибаюсь. : -)

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