SQL LOAD FILE用零/空值填充表

时间:2019-03-28 22:10:25

标签: php sql wordpress mariadb

因此,使用PHP和Wordpress将CSV加载到SQL数据库时遇到问题。两者都在本地xammp atm上运行。

这是我用于加载CSV文件的代码。它首先通过html表单将其上传到某个临时文件夹(数据),然后尝试使用LOAD DATA将内容复制到表(wp_data

<?php
if (isset($_POST['submit'])) {
    global $wordpress,$wpdb;
    $file = $_FILES['fileToUpload']['tmp_name'];
    $target_dir = $_SERVER['DOCUMENT_ROOT']."/data";
    $target_file = $target_dir . '/' . basename($_FILES["fileToUpload"]["name"]);
    move_uploaded_file($file, $target_file);

    $sql="
        LOAD DATA INFILE '$target_file' INTO TABLE wp_data FIELDS TERMINATED BY ';' IGNORE 1 ROWS";
    $query = $wpdb->query($sql);
}
?>

上载部分工作正常,但是当尝试用数据填充表时,它仅填充“ 0s” / NULL值,例如 this

enter image description here

文件为文本格式,如下所示:

enter image description here

从视觉上看,它看起来像是

enter image description here

SHOW CREATE TABLE wp_data中的表结构:

CREATE TABLE `wp_data` (
 `Unix_time` int(11) NOT NULL,
 `Message` text NOT NULL,
 `Time` float NOT NULL,
 `DF` int(11) NOT NULL,
 `Type_code/BDS_number` int(11) NOT NULL,
 `Latitude` double NOT NULL,
 `Longitude` double NOT NULL,
 `Altitude` int(11) NOT NULL,
 `Ground_speed` double NOT NULL,
 `Baro_diff` int(11) NOT NULL,
 `Heading` int(11) NOT NULL,
 `TAS` int(11) NOT NULL,
 `Mach` float NOT NULL,
 `FOM_SOURCE` varchar(40) DEFAULT NULL,
 `Wind_speed` varchar(40) DEFAULT NULL,
 `Wind_direction` varchar(40) DEFAULT NULL,
 `Temperture` text,
 `Pressure` varchar(40) DEFAULT NULL,
 `Turbulence` varchar(40) DEFAULT NULL,
 `Humidity` varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我在这里做错了什么?我在PHP上还很陌生,因此陷入了困境 :(...

谢谢。

1 个答案:

答案 0 :(得分:1)

通过将查询中的编码设置为CHARACTER SET UTF8来解决此问题,如下所示:

LOAD DATA INFILE '$target_file'
INTO TABLE wp_data 
CHARACTER SET UTF8 
FIELDS TERMINATED BY ';'
IGNORE 1 ROWS;