LOAD数据infile不导入datetime

时间:2016-09-16 08:27:54

标签: php mysql datetime

我的csv文件看起来像是:

  

0,00018332,2016-08-29 00:00:00,2016-08-29 00:00:00,9999,仅限零件销售,0,DMS Maritime Pty Ltd,xyz ,, 00000250,1971- 01-01 00:00:00,1971-01-01 00:00:00,218335,仅限零件销售,9999

然后我有php脚本将这个csv导入表

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
   View v = view;
   ImageView picture;
   TextView name;

   if (v == null) {
       v = mInflater.inflate(R.layout.grid_item, viewGroup, false);
       v.setTag(R.id.picture, v.findViewById(R.id.picture));
       v.setTag(R.id.text, v.findViewById(R.id.text));
   }

   picture = (ImageView) v.getTag(R.id.picture);
   name = (TextView) v.getTag(R.id.text);

   Item item = getItem(i);

   picture.setImageResource(item.drawableId);
   picture.setTag(item.drawableId);
   name.setText(item.name);

   picture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String imageID = v.getTag().toString();
            Uri uri = Uri.parse("android.resource://your.package.here/drawable/"+imageID);
            ((ActivityNameHere) context).showImage(uri);
        }
    });

   return v;
}

但是当我在db表中检查它时,值2016-08-29 00:00:00(列是datetime)是0000-00-0000:00:00,218335和9999被设置为0个事件列设置为int(11)。其他所有内容都正确写入。我尝试使用csv和txt,我有同样的问题。

你知道为什么吗?

编辑:

$fieldseparator = ","; 
$lineseparator = "\n";
$csvfile = "test.csv";
$dbtable = "res";

$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$dbtable`
FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
LINES TERMINATED BY ".$pdo->quote($lineseparator)); 

2 个答案:

答案 0 :(得分:2)

你的文件是用utf16编码的,mysql不会自己检查。在数据源中更改它(因为您的表编码表明您不想使用utf16字符串)或通知mysql有关文件的编码。

对于您的文件,以下内容应该有效:

LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE res
CHARACTER SET utf16le
FIELDS TERMINATED BY ';\0'
LINES TERMINATED BY '\r\0\n\0';

它设置文件的字符集并在unicode中定义分隔符。您也可以只使用'\n\0'

答案 1 :(得分:0)


为什么不在mysql cmd中执行:显示警告,看看确切的错误是什么。
https://dev.mysql.com/doc/refman/5.5/en/show-warnings.html