Страница 2 из 4

Re: BIGINT

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

Re: BIGINT

Добавлено: 17 сен 2013, 22:02
Garch
В общем давайте так вопрос поставим:
Какой самый оптимальный способ хранить в базе числа от 0 до 999999999999999999? Это число я только получаю из базы, обрабатываю в as3 и засовываю обратно. Какой тип поля должен стоять в бд?
Прошу объяснить как можно подробнее, а то потом могут проблемы возникнуть серьезные, а в чем беда не пойму))
Заранее благодарю)

Re: BIGINT

Добавлено: 17 сен 2013, 22:49
Serge
А клиент не обидится на такие большие числа? Он их будет обрабатывать?

Re: BIGINT

Добавлено: 17 сен 2013, 22:51
alexei
Вопрос как вы их получаете?
Какой именно с ними запрос делаете?

Вообще смысла в больших числах нету, если это не долг США)) Нормальный вариант обойтись без них. А так BigInt

Re: BIGINT

Добавлено: 17 сен 2013, 22:53
Abarmotina
А не вариант передавать в БД значение "3", а при работе уже прибавлять 6 нулей? ;) Имхо, чем не вариант?

Re: BIGINT

Добавлено: 17 сен 2013, 23:01
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 полученное из базы число в переменную с каким типом пытаетесь засунуть? ;)

Re: BIGINT

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

Re: BIGINT

Добавлено: 17 сен 2013, 23:13
Abarmotina
Ааа! ;) Тогда пост IndieGD Вам должен помочь! :) Перепроверьте всё.

Re: BIGINT

Добавлено: 17 сен 2013, 23:16
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)); 

Re: BIGINT

Добавлено: 17 сен 2013, 23:17
alexei

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

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

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

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

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

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