У меня проблема с моей базой данных SQL, заполненной программой C с использованием коннектора my SQL. Соответствующая часть C -кода, заполняющая базу данных, отображается ниже:
sprintf(query_table, "CREATE TABLE IF NOT EXISTS `%08X` (COUNTER INT NOT NULL AUTO_INCREMENT PRIMARY KEY, TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6), DATA VARCHAR(16))", frame.can_id-0x80000000);
if (mysql_query(conn, query_table) != 0)
{
fprintf(stderr, "Query Failure; create tables from can log!\n");
return EXIT_FAILURE;
}
sprintf(query, "INSERT INTO `%08X` (TIME, DATA) VALUES (FROM_UNIXTIME(%ld.%06ld), '%02X%02X%02X%02X%02X%02X%02X%02X')",frame.can_id-0x80000000,tv.tv_sec,tv.tv_usec,frame.data[0],frame.data[1],frame.data[2],frame.data[3],frame.data[4],frame.data[5],frame.data[6],frame.data[7]);
//printf("%s",query);
if (mysql_query(conn, query) != 0)
{
fprintf(stderr, "Query Failure; insert into database!\n");
return EXIT_FAILURE;
}
frame.data - это подструктура, которая включает в себя 8-байтовое шестнадцатеричное значение, созданное пиковым интерфейсом CAN с Скорость передачи 250 кбит. Как показывает код, с любым новым идентификатором телеграммы CAN база данных проверяет наличие соответствующей таблицы базы данных. В случае отсутствия, таблица будет создана. Из-за неизвестных изменений программного обеспечения CAN, к сожалению, невозможно предварительно выделить таблицы.
После двухмесячного периода измерений БД была заполнена разными телеграммами и наборами данных. Во-первых, все выглядит нормально, но при более внимательном рассмотрении видны некоторые несоответствия. Прилагаемое изображение 1 отображает 3 различных случая Cardinality-Auto-Increment-Issues, чтобы объяснить текущую ситуацию. Я не очень часто использую свои SQL или C -программирования, поэтому я был бы признателен за несколько хороших советов по решению этой проблемы.
Большое спасибо и всего наилучшего из Германии.