BIGINT

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
IndieGD
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20

Re: BIGINT

Сообщение IndieGD »

Garch, поля типа CHAR и VARCHAR могут хранить до 255 символов, занимают памяти в байтах равно числу хранимых в них символов. (у VARCHAR еще вроде +1 байт).
То есть число 999999999999999999999 займет 21 - 22 байта. Если у вас будет с миллион строк с такими числами, то они займут где-то мегабайт двадцать.
В выборке они конечно будут уступать числовым. Но если вы по этим полям выбирать не будете или строк не очень много, то такой способ вполне жизнеспособен.
Garch
Сообщения: 186
Зарегистрирован: 27 ноя 2011, 20:49

Re: BIGINT

Сообщение Garch »

В общем давайте так вопрос поставим:
Какой самый оптимальный способ хранить в базе числа от 0 до 999999999999999999? Это число я только получаю из базы, обрабатываю в as3 и засовываю обратно. Какой тип поля должен стоять в бд?
Прошу объяснить как можно подробнее, а то потом могут проблемы возникнуть серьезные, а в чем беда не пойму))
Заранее благодарю)
Serge
WEB Team
WEB Team
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55

Re: BIGINT

Сообщение Serge »

А клиент не обидится на такие большие числа? Он их будет обрабатывать?
Аватара пользователя
alexei
Разработчик
Разработчик
Сообщения: 836
Зарегистрирован: 21 янв 2010, 19:44

Re: BIGINT

Сообщение alexei »

Вопрос как вы их получаете?
Какой именно с ними запрос делаете?

Вообще смысла в больших числах нету, если это не долг США)) Нормальный вариант обойтись без них. А так BigInt
Аватара пользователя
Abarmotina
Сообщения: 469
Зарегистрирован: 21 апр 2012, 19:34

Re: BIGINT

Сообщение Abarmotina »

А не вариант передавать в БД значение "3", а при работе уже прибавлять 6 нулей? ;) Имхо, чем не вариант?
IndieGD
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20

Re: BIGINT

Сообщение IndieGD »

Храните в BIGINT и не парьтесь. А на счет того, что у вас BIGINT за INT принимает перепроверьте все еще раз.
Пример:
Создаю таблицу

Код: Выделить всё

CREATE TABLE `mytable` (    `id` BIGINT NOT NULL AUTO_INCREMENT,    `name` TEXT,    PRIMARY KEY (`id`));
добавляю пару записей одну с числом на пределе INT другую с заведомо большим

Код: Выделить всё

INSERT INTO `mytable` VALUES (2147483646,'IndieGD');INSERT INTO `mytable` VALUES (999999999999999,'IndieGD');
Пишу в PHP:

Код: Выделить всё

 $db = new Mysqli();$db->connect("localhost", 'root', 'root');$db->select_db("test");$db->query("UPDATE `mytable` SET `id` = `id` + 1000"); 
Получаю в базе:
2147484646 и 10000000000000999
Никаких проблем нет.
Вы на клиенте или в PHP полученное из базы число в переменную с каким типом пытаетесь засунуть? ;)
Garch
Сообщения: 186
Зарегистрирован: 27 ноя 2011, 20:49

Re: BIGINT

Сообщение Garch »

А клиент не обидится на такие большие числа? Он их будет обрабатывать?
Ну я думаю не должен, а там посмотрим))
Вопрос как вы их получаете?
Какой именно с ними запрос делаете?
Через пхп, SELECT, потом перевожу ответ в json и использую во флэше вытаскивая данные из json'а)
Потом обратно INSERT INTO
Вообще смысла в больших числах нету, если это не долг США)) Нормальный вариант обойтись без них. А так BigInt
Как это обойтись без них? Это же очки юзера, они должны быть
Ну точнее не очки, а скорее валюта. Хотя скорее что-то среднее))
А не вариант передавать в БД значение "3", а при работе уже прибавлять 6 нулей? ;) Имхо, чем не вариант?
Вы не поняли, число может быть абсолютно любым, а 3000000 это я написал просто для примера - типо насколько будет большим число если каждую секунду к нему прибавляется например 3000000))
Аватара пользователя
Abarmotina
Сообщения: 469
Зарегистрирован: 21 апр 2012, 19:34

Re: BIGINT

Сообщение Abarmotina »

Ааа! ;) Тогда пост IndieGD Вам должен помочь! :) Перепроверьте всё.
Garch
Сообщения: 186
Зарегистрирован: 27 ноя 2011, 20:49

Re: BIGINT

Сообщение Garch »

Вы на клиенте или в PHP полученное из базы число в переменную с каким типом пытаетесь засунуть? ;)
В пхп я кодирую просто все в json

Код: Выделить всё

$result = mysql_query('SELECT `total`,`persec` FROM stat WHERE uid='.$viewer_id.'');    $score = mysql_fetch_array($result);        echo json_encode($score); 
Потом во Флэше достаю из jsona

Код: Выделить всё

            var resultJ = JSON.parse(stat_loader.data);NTotal = int(resultJ.total);var nf:NumberFormatter = new NumberFormatter("en-US"); total.text=String(nf.formatNumber(NTotal)); 
Аватара пользователя
alexei
Разработчик
Разработчик
Сообщения: 836
Зарегистрирован: 21 янв 2010, 19:44

Re: BIGINT

Сообщение alexei »

Код: Выделить всё

Через пхп, SELECT, потом перевожу ответ в json и использую во флэше вытаскивая данные из json'а)Потом обратно INSERT INTO 
Выборка по чему проходит по большому числу или нет?

Код: Выделить всё

SELECT vkid, score WHERE vkid=@vkid
или

Код: Выделить всё

SELECT vkid, score WHERE score=@score
Если по ним выборки нету, то можно особо не париться. А если по ним, то ситуация гораздо более серьезная.
Ответить