我已经在PHP上编写了以下代码,并且我遇到了错误:第1行的" datetime_gmt"列截断的数据;
这是代码:
$lines = new SplFileObject('/home/file.txt');
$x = 0;
while(!$lines->eof()) {
$lines->next();
if($x == 0){
$lines->next();
}
$row = explode(',',$lines);
for($i = 0; $i<4; $i++){
if(!isset($row[$i])){
$row[$i] = null;
}
}
$y = (float) $row[1];
$z = (float) $row[2];
$load_query = "INSERT IGNORE INTO new (datetime_gmt,field2,field3)
VALUES ('".$row[0]."','".$y."','".$z."');";
$x++;
}
$lines = null;
列是'dateTime'的类型,默认为0000-00-00 00:00:00',它是表的PRI。如果您想知道" x"变量,它是为了跳过前2行。
编辑1
这是一个示例数据:
2013-12-11 8:22:00, 1.462E+12, 3.33E+11
2013-12-12 4:10:00, 1.462E+12, 3.33E+11
2013-12-13 11:52:00, 1.462E+12, 3.33E+11
这是表" new"表的描述:
Field | Type | Null | Key | Default | Extra
datetime_gmt | datetime |No | PRI |0000-00-00 00:00:00 |
field2 | bigint(20)|YES | |NULL |
field3 | bigint(20)|YES | |NULL |
使用:
SELECT sum(char_length(COLUMN_NAME))
FROM TABLE_NAME;
我得到了19列的大小。
请直接将此查询运行到您的数据库中:插入到new(datetime_gmt,field2,field3(值('2013-12-11 8:22:00','1462000000000',,'2013-12-11 8:22:00','333000000000'(;
如果不添加一行,请删除datetime_gmt列上的默认值然后重新试验。
注意:您的代码有一个语法错误。
更改此内容:
$load_query = "INSERT IGNORE INTO new (datetime_gmt,field2,field3)
VALUES ('".$row[0]"','".$y."','".$z."');";
:
$load_query = "INSERT IGNORE INTO new (datetime_gmt,field2,field3)
VALUES ('".$row[0]."','".$y."','".$z."');";
如果上述不起作用,请尝试在您的SQL模式中替换引擎:
set @@sql_mode='no_engine_substitution';
然后确保通过运行以下内容显示NO_ENGINE_SUBSTITITION:
select @@sql_mode;
然后尝试再次运行代码。set @@ sql_mode可能不是宽的服务器,它可能仅适用于您当前的会话。