MySQL 尽管格式正确,字段 DATETIME 仍被截断
MySQL field DATETIME truncates despite correct format
我目前正在尝试将 reloads.csv
中的数据加载到我的数据库中。
但是 DATETIME 字段被截断了。我注意获取正确的日期格式,如 .
当我加载数据时,出现这种错误:
Connected successfully
537,496,3,4,4.36186,50.86034,4.372,50.86309,2017-01-01T22:05:55,2017-01-02T05:02:20
248,129,2,4,4.37052,50.86135,4.36254,50.82652,2017-01-01T23:56:45,2017-01-02T05:05:33 Error: INSERT INTO Reloads (scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX, destinationY, startTime, endTime) VALUES ('248', '129','2', '4', '4.37052', '50.86135', '4.36254','50.82652', '2017-01-01 23:56:45', '2017-01-02 05:05:33 ')
Duplicate entry '2017-01-01' for key 'PRIMARY'
363,17,1,4,4.36902,50.87497,4.3785,50.87691,2017-01-01T22:00:52,2017-01-02T05:08:34 Error: INSERT INTO Reloads (scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX, destinationY, startTime, endTime) VALUES ('363', '17','1', '4', '4.36902', '50.87497', '4.3785','50.87691', '2017-01-01 22:00:52', '2017-01-02 05:08:34 ')
Duplicate entry '2017-01-01' for key 'PRIMARY'
...
reloads.csv 具有以下结构:
scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX,
destinationY, startTime, endTime
537,496,3,4,4.36186,50.86034,4.372,50.86309,2017-01-01T22:05:55,2017-01-02T05:02:20
248,129,2,4,4.37052,50.86135,4.36254,50.82652,2017-01-01T23:56:45,2017-01-02T05:05:33
363,17,1,4,4.36902,50.87497,4.3785,50.87691,2017-01-01T22:00:52,2017-01-02T05:08:34
...
我像这样创建了 Reloads table:
$sql = "CREATE TABLE Reloads (
scooter INT NOT NULL,
user INT NOT NULL,
initialLoad INT,
finalLoad INT,
sourceX FLOAT,
sourceY FLOAT,
destinationX FLOAT,
destinationY FLOAT,
startTime DATETIME NOT NULL,
endTime DATETIME,
PRIMARY KEY (startTime),
FOREIGN KEY (scooter) REFERENCES Scooters(numero),
FOREIGN KEY (user) REFERENCES Rechargeurs(ID)
)";
这里是加载重新加载到重新加载的方式 table:
//INSERT RELOADS IN DB
if ($fh = fopen("../../data2019/reloads.csv", 'r')) {
$line = fgets($fh);//remove first line
$sql = "";
while (!feof($fh)) {
$line = fgets($fh);
echo "<br>" . $line;
//echo $line;
$str_arr = explode(",", $line);
//print_r($str_arr);
if (count($str_arr) == 10) {
$startTime = str_replace("T", " ",$str_arr[8]);
$endTime = str_replace("T", " ",$str_arr[9]);
$sql = "INSERT INTO Reloads (scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX, destinationY,
startTime, endTime)
VALUES (
'$str_arr[0]',
'$str_arr[1]',
'$str_arr[2]',
'$str_arr[3]',
'$str_arr[4]',
'$str_arr[5]',
'$str_arr[6]',
'$str_arr[7]',
'$startTime',
'$endTime'
)";
if ($conn->query($sql) === TRUE) {
//echo "\nNew record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
fclose($fh);
}
我不知道如何调试和解决问题。在我的数据库中,所有日期时间都以这种形式被截断:2017-01-01
提前致谢
您可以根据您的数据使用 substr
和 strpos
仅获取 Y-m-d
格式的日期
$startTime = '2017-01-01T22:05:55';
$endTime = '2017-01-02T05:08:34';
$startTime = substr($startTime,0,strpos($startTime, 'T'));
$endTime = substr($endTime,0,strpos($endTime, 'T'));
您可以将 DateTime
用于 Y-m-d H:i:s
$startTime = '2017-01-01T22:05:55';
$dateObject = new DateTime($startTime);
$startTime = $dateObject->format('Y-m-d H:i:s');
$endTime = '2017-01-02T05:08:34';
$dateObject = new DateTime($endTime);
$endTime = $dateObject->format('Y-m-d H:i:s');
我目前正在尝试将 reloads.csv
中的数据加载到我的数据库中。
但是 DATETIME 字段被截断了。我注意获取正确的日期格式,如
当我加载数据时,出现这种错误:
Connected successfully 537,496,3,4,4.36186,50.86034,4.372,50.86309,2017-01-01T22:05:55,2017-01-02T05:02:20 248,129,2,4,4.37052,50.86135,4.36254,50.82652,2017-01-01T23:56:45,2017-01-02T05:05:33 Error: INSERT INTO Reloads (scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX, destinationY, startTime, endTime) VALUES ('248', '129','2', '4', '4.37052', '50.86135', '4.36254','50.82652', '2017-01-01 23:56:45', '2017-01-02 05:05:33 ') Duplicate entry '2017-01-01' for key 'PRIMARY' 363,17,1,4,4.36902,50.87497,4.3785,50.87691,2017-01-01T22:00:52,2017-01-02T05:08:34 Error: INSERT INTO Reloads (scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX, destinationY, startTime, endTime) VALUES ('363', '17','1', '4', '4.36902', '50.87497', '4.3785','50.87691', '2017-01-01 22:00:52', '2017-01-02 05:08:34 ') Duplicate entry '2017-01-01' for key 'PRIMARY' ...
reloads.csv 具有以下结构:
scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX,
destinationY, startTime, endTime
537,496,3,4,4.36186,50.86034,4.372,50.86309,2017-01-01T22:05:55,2017-01-02T05:02:20
248,129,2,4,4.37052,50.86135,4.36254,50.82652,2017-01-01T23:56:45,2017-01-02T05:05:33
363,17,1,4,4.36902,50.87497,4.3785,50.87691,2017-01-01T22:00:52,2017-01-02T05:08:34
...
我像这样创建了 Reloads table:
$sql = "CREATE TABLE Reloads (
scooter INT NOT NULL,
user INT NOT NULL,
initialLoad INT,
finalLoad INT,
sourceX FLOAT,
sourceY FLOAT,
destinationX FLOAT,
destinationY FLOAT,
startTime DATETIME NOT NULL,
endTime DATETIME,
PRIMARY KEY (startTime),
FOREIGN KEY (scooter) REFERENCES Scooters(numero),
FOREIGN KEY (user) REFERENCES Rechargeurs(ID)
)";
这里是加载重新加载到重新加载的方式 table:
//INSERT RELOADS IN DB
if ($fh = fopen("../../data2019/reloads.csv", 'r')) {
$line = fgets($fh);//remove first line
$sql = "";
while (!feof($fh)) {
$line = fgets($fh);
echo "<br>" . $line;
//echo $line;
$str_arr = explode(",", $line);
//print_r($str_arr);
if (count($str_arr) == 10) {
$startTime = str_replace("T", " ",$str_arr[8]);
$endTime = str_replace("T", " ",$str_arr[9]);
$sql = "INSERT INTO Reloads (scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX, destinationY,
startTime, endTime)
VALUES (
'$str_arr[0]',
'$str_arr[1]',
'$str_arr[2]',
'$str_arr[3]',
'$str_arr[4]',
'$str_arr[5]',
'$str_arr[6]',
'$str_arr[7]',
'$startTime',
'$endTime'
)";
if ($conn->query($sql) === TRUE) {
//echo "\nNew record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
fclose($fh);
}
我不知道如何调试和解决问题。在我的数据库中,所有日期时间都以这种形式被截断:2017-01-01
提前致谢
您可以根据您的数据使用 substr
和 strpos
仅获取 Y-m-d
格式的日期
$startTime = '2017-01-01T22:05:55';
$endTime = '2017-01-02T05:08:34';
$startTime = substr($startTime,0,strpos($startTime, 'T'));
$endTime = substr($endTime,0,strpos($endTime, 'T'));
您可以将 DateTime
用于 Y-m-d H:i:s
$startTime = '2017-01-01T22:05:55';
$dateObject = new DateTime($startTime);
$startTime = $dateObject->format('Y-m-d H:i:s');
$endTime = '2017-01-02T05:08:34';
$dateObject = new DateTime($endTime);
$endTime = $dateObject->format('Y-m-d H:i:s');