Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是导入MySQL数据库的最佳CSV文件格式吗_Php_Mysql_Bash_Csv - Fatal编程技术网

Php 这是导入MySQL数据库的最佳CSV文件格式吗

Php 这是导入MySQL数据库的最佳CSV文件格式吗,php,mysql,bash,csv,Php,Mysql,Bash,Csv,我有以下格式的数据(示例数据,有许多行): 我想知道的是,将其导入mysql的最佳格式/实践是什么 一些具体问题是: 日期是否应为“2015-10-06” 第2、3和4列是否应采用带双引号的字符串格式,例如“0427” 对于列标题,是否应删除所有空格和括号 还有别的吗 在将数据导入我的数据库之前,可能我的数据看起来更像这样: 用下划线替换所有空格 拆下支架 通过删除双引号将列2、3和4转换为值 看起来是这样的: "Rec_Open_Date","number_1","number_2","D

我有以下格式的数据(示例数据,有许多行):

我想知道的是,将其导入mysql的最佳格式/实践是什么

一些具体问题是:

  • 日期是否应为“2015-10-06”
  • 第2、3和4列是否应采用带双引号的字符串格式,例如“0427”
  • 对于列标题,是否应删除所有空格和括号
  • 还有别的吗
  • 在将数据导入我的数据库之前,可能我的数据看起来更像这样:

    • 用下划线替换所有空格
    • 拆下支架
    • 通过删除双引号将列2、3和4转换为值
    看起来是这样的:

    "Rec_Open_Date","number_1","number_2","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Product_Description"
    "2015-10-06",0427,70060,137765,"Samsung Korea","Samsung SM-G900I","$39 option"
    "2015-10-06",7592,55620,0,"Apple Inc","Apple iPhone 6 (A1586)","some text  #16"
    ...
    
    再次只是寻找最佳实践


    下一个问题是,是否有一个解析器可以完成所有这一切,可能是在bash或其他等效工具中?

    您可以使用命令行中的
    mysql load data infle
    完成这项工作,如下所述:

    如果您可以控制csv文件的格式,则将加载到数字数据库类型中的任何值都不应带有引号。日期值对于mysql日期类型来说很好,正如您所示。如果您坚持使用该csv格式,可以使用“加载数据”选项转换输入值,如下所述:示例是关于日期转换的,但也可以进行许多其他转换


    另外请注意,如果已经定义了db表,则可以跳过标题行,这样就不必担心标题与列名和空格等匹配。

    您可以使用命令行中的
    mysql load data infle
    完成此项工作,如下所述:

    如果您可以控制csv文件的格式,则将加载到数字数据库类型中的任何值都不应带有引号。日期值对于mysql日期类型来说很好,正如您所示。如果您坚持使用该csv格式,可以使用“加载数据”选项转换输入值,如下所述:示例是关于日期转换的,但也可以进行许多其他转换


    另外请注意,如果已经定义了db表,则可以跳过标题行,这样就不必担心标题与列名和空格等匹配。

    1。一种方法是将csv文件导入mysql,您可以使用phpMyAdmin等工具

    2.你可以试试这个代码。这是一个php脚本,用于将文件转换为mysql

    <?php    
    $databasehost = "localhost";
    $databasename = "test";
    $databasetable = "sample"; 
    $databaseusername="test"; 
    $databasepassword = "";
    $fieldseparator = ",";
    $lineseparator = "\n";
    $csvfile = "filename.csv";
    if(!file_exists($csvfile)) {
    die("File not found. Make sure you specified the correct path.");
    }
    try {
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
        $databaseusername, $databasepassword,
        array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
    } catch (PDOException $e) {
    die("database connection failed: ".$e->getMessage());
    }
    
    $affectedRows = $pdo->exec('
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
      FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
      LINES TERMINATED BY ".$pdo->quote($lineseparator))." ');
    echo "Loaded a total of $affectedRows records from this csv file.\n";
    ?>
    

    一种方法是将csv文件导入mysql,您可以使用phpMyAdmin之类的工具

    2.你可以试试这个代码。这是一个php脚本,用于将文件转换为mysql

    <?php    
    $databasehost = "localhost";
    $databasename = "test";
    $databasetable = "sample"; 
    $databaseusername="test"; 
    $databasepassword = "";
    $fieldseparator = ",";
    $lineseparator = "\n";
    $csvfile = "filename.csv";
    if(!file_exists($csvfile)) {
    die("File not found. Make sure you specified the correct path.");
    }
    try {
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
        $databaseusername, $databasepassword,
        array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
    } catch (PDOException $e) {
    die("database connection failed: ".$e->getMessage());
    }
    
    $affectedRows = $pdo->exec('
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
      FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
      LINES TERMINATED BY ".$pdo->quote($lineseparator))." ');
    echo "Loaded a total of $affectedRows records from this csv file.\n";
    ?>
    

    CSV文件应该按照导出数据的确切顺序。导出的数据应与csv数据的导入相同。因此,您将按原样导入,而不进行任何更改?您应在数据库上进行数据库更改;不在csv上。我该怎么做?我只是想说清楚。我是否按原样导入,然后在数据库中进行更改(名称更改等),不确定我是否完全遵循…CSV文件应该按照您导出数据的确切顺序。导出的数据应与csv数据的导入相同。因此,您将按原样导入,而不进行任何更改?您应在数据库上进行数据库更改;不在csv上。我该怎么做?我只是想说清楚。我是否按原样导入,然后在db中进行更改(名称更改等),不确定我是否完全遵循…在以“$pdo->quote($lineseparator)”结尾的第27行
    上出现错误);
    ---语法错误或访问冲突:1148此MySQL版本不允许使用所用命令我在该行中编辑了一个小错误。您可以立即尝试。如果仍然存在问题,请尝试首先将exec字符串放入语句中并使用变量。也可以尝试以下操作:在MySQL命令上使用--local infle=1参数行:当您在终端上启动MySQL时,包括--local infle=1参数,类似这样:MySQL--local infle=1-uroot-p MySQL>将数据local infle'/tmp/foo.txt'加载到以'\t'结尾的表foo列中;然后允许使用命令:Query OK,3行受影响(0.00秒)记录:3已删除:0已跳过:0警告:0在以“$pdo->quote($lineseparator”)结尾的第27行
    行上获取错误---语法错误或访问冲突:1148此MySQL版本不允许使用此命令。我在该行编辑了一个小错误。现在可以尝试。如果仍然存在问题,请先尝试将exec字符串放入语句中并使用变量。也可以尝试以下操作:在mysql命令行上使用--local infie=1参数:在终端上启动mysql时,包括--local infie=1参数,类似这样的内容:mysql--local infle=1-uroot-pMySQL>将数据本地infle'/tmp/foo.txt'加载到以'\t'结尾的表foo列中;然后允许该命令:查询确定,3行受影响(0.00秒)记录:3删除:0跳过:0警告:0