我的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));
答案 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