Php 这是导入MySQL数据库的最佳CSV文件格式吗
我有以下格式的数据(示例数据,有许多行): 我想知道的是,将其导入mysql的最佳格式/实践是什么 一些具体问题是: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
- 用下划线替换所有空格
- 拆下支架
- 通过删除双引号将列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