Значение, вставленное в таблицу MYSQL, отличается от исходного значения - PullRequest
2 голосов
/ 02 ноября 2010

У меня самая странная проблема с изменением значения при вставке его в таблицу MYSQL.

Это для темы Wordpress.

Вот суть кода:

$user_id = $_COOKIE['user-id'];
$wpdb->insert($custom_table,array('user_id'=>$user_id));

Тип поля 'user_id' в $ custom_table - int (15).

Я сейчас проверяю себя. Идентификатор пользователя, сохраненный в моем файле cookie, - 4022466561291. Он хранится в базе данных как 2147483647.

Я также пробовал различные комбинации этой настройки:

$user_id = intval($_COOKIE['user-id']);
$wpdb->insert($custom_table,array('user_id'=>$user_id),array('%d'));

с такими же результатами.

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 02 ноября 2010

Это потому, что 2147483647 - это максимальное значение 4-байтового знака со знаком INT.

Вам нужно использовать 8-байтовый BIGINT или - может быть, более подходящий здесь - VARCHAR.

(15) после INT немного вводит в заблуждение. Это дополнительное ограничение длины дисплея. Это не меняет фактическую емкость типа данных.

1 голос
/ 02 ноября 2010

int не будет содержать это большое значение.Вы можете попробовать bigint.См. MySQL документацию

0 голосов
/ 02 ноября 2010

Из MySql Руководство

INT [(M)] [ПОДПИСАНО] [ZEROFILL]

Целое число нормального размера. Подписанный диапазон от -2147483648 до 2147483647. Диапазон без знака от 0 до 4294967295.

(15) на вашем INT является рекомендуемой шириной дисплея, и не заставляет INT содержать большие числа. Вам нужен BIGINT.

0 голосов
/ 02 ноября 2010

Смотрите здесь: http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

Максимум для int - 2147483647, попробуйте использовать bigint.

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