Когда я выполняю запрос, в котором данные переданы в качестве замены, дата не устанавливается как UTC-Date в запросе.
Мой код:
let startInterval = moment('2020-12-09').toDate();
db.query(`
SELECT kv.kpiId
FROM kpiValues kv
WHERE kv.insertDate >= :startInterval
`, {
type: QueryTypes.SELECT,
replacements: {
startInterval: startInterval,
}
}).catch(next)
Печать переменной startInterval приводит к 2020-12-08T23:00:00.000Z
.
Когда я вывожу запрос, он показывает
SELECT kv.kpiId
FROM kpiValues kv
WHERE kv.insertDate >= '2020-12-09 00:00:00.000'
Столбец является продолжением столбца даты (SQL Datetime). Значение в запросе — это мое местное время, но база данных должна использовать только значения UTC, поэтому я ожидаю, что она будет использовать 2020-12-08T23:00:00.000
в запросе. Что я могу сделать?
Соединение продолжения:
const sequelize = new Sequelize(dbName, dbUser, dbPassword, {
host: Settings.dbUrl,
port: dbPort,
dialect: 'mariadb',
dialectOptions: {},
timezone: '+00:00',
pool: {
max: 70,
min: 5,
acquire: 30000
},
define: {
timestamps: false,
freezeTableName: true
},
logging: true // Remove property when all statements that are executed should be printed
});
@Анатолий МарияДБ
В MariaDB дата и время хранятся as is
без информации о часовом поясе. Смотрите mariadb.com/kb/en/datetime/#time-zones
@Анатолий, а можно что-нибудь сделать? Неужели сиквелиз никогда не справляется с этим в необработанных запросах SELECT? В функциях вставки и обновления продолжения он автоматически использует время UTC.
Можете ли вы передать дату и время UTC в виде строки?
@ Анатолий Да, я могу это сделать - наконец-то я это сделал. Но я бы назвал это обходным путем, я думаю, что sequenceize должен предоставить метод для автоматического выполнения этого для каждой даты, которая передается, как это делается в функции создания или обновления. Эта функция отсутствует для необработанных запросов. Спасибо за вашу помощь!
Поскольку нет решения этой проблемы с mariaDB в качестве СУБД, использующей секвенирование, работает следующий обходной путь: Просто вручную передайте заменяющую переменную как UTC-String:
dateVariable.toISOString()
Какую СУБД вы используете?