Только градусы и минуты в базе данных

v.kireytsev 3 years ago

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

Код create базы такой:

CREATE TABLE `tc_positions` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`protocol` VARCHAR(128) NULL DEFAULT NULL,
	`deviceid` INT(11) NOT NULL,
	`servertime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	`devicetime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
	`fixtime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
	`valid` BIT(1) NOT NULL,
	`latitude` DOUBLE(22,0) NOT NULL,
	`longitude` DOUBLE(22,0) NOT NULL,
	`altitude` FLOAT(12,0) NOT NULL,
	`speed` FLOAT(12,0) NOT NULL,
	`course` FLOAT(12,0) NOT NULL,
	`address` VARCHAR(512) NULL DEFAULT NULL,
	`attributes` VARCHAR(4000) NULL DEFAULT NULL,
	`accuracy` DOUBLE(22,0) NOT NULL DEFAULT '0',
	`network` VARCHAR(4000) NULL DEFAULT NULL,
	PRIMARY KEY (`id`),
	INDEX `position_deviceid_fixtime` (`deviceid`, `fixtime`) USING BTREE,
	CONSTRAINT `fk_positions_deviceid` FOREIGN KEY (`deviceid`) REFERENCES `tc_devices` (`id`) ON UPDATE NO ACTION ON DELETE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=6327597
;

Может ли быть дело в том, что для хранения координат неверно выбран тип данных double? Или знак десятичного разделителя может быть неверно выбран?
Что можно попробовать сделать, чтобы координаты сохранялись полностью?

Anton Tananaev 3 years ago

Не понял. Что не сохраняется? Примеры приведите пожалуйста.

v.kireytsev 3 years ago

Нашел уже причину.

    `latitude` DOUBLE(22,0) NOT NULL,
    `longitude` DOUBLE(22,0) NOT NULL,

вот это 22,0 означает что 0 знаков после десятичного разделителя БД будет сохранять. Изменил на 22,14 координаты стали сохранятся полностью, с десятичной частью.

v.kireytsev 3 years ago

Подскажите какие там должны быть значения по установочному скрипту traccar?

Anton Tananaev 3 years ago

Почему не хотите что Traccar вам таблицы создал автоматически?

v.kireytsev 3 years ago

БД переносил другой сотрудник и чтоб сохранить историю перемещений использовал бекап в sql файл наверное. И он как-то неправильно развернулся наверное на разных версиях движка.

Anton Tananaev 3 years ago

Я бы посоветовал создать базу автоматически а потом скопировать уже только данные а не всю схему.