English 中文(简体)
How do I get SQL LOAD DATA from CSV to honour the column type when loading?
原标题:

I am loading a CSV file into MySQL (5.1) using CREATE TABLE and LOAD DATA. I have a number of columns which are textual types (categories) but contain numerical values. When I create the table I assign these columns as VARCHAR(254) but the JDBC driver throws a SQLException "Data truncated for column AgeGroup at row 1".

My data looks like this:

ID,AgeGroup
xxx,4
xxy,3
xyx,6
...

My create table statement looks like this

CREATE TABLE abc(ID VARCHAR(254), AgeGroup VARCHAR(254))

My load statement looks like this

LOAD DATA INFILE myfile.csv INTO TABLE abc FIELDS TERMINATED BY  , 

I am guessing that it is a type conversion issue because AgeGroup is a textual database column but I am sticking what appear to be numbers in it.

How do I - can I - force the LOAD DATA command to honour the datatype of the column and convert the contents of the file?

I m using the official MySQL JDBC Driver.

问题回答

I am surprised that this doesn t work. I mean, I would expect this behaviour when sticking string values in numeric columns - not the otherway around.

Anyway, you can use an extension of the LOAD DATA syntax introduced in v5.0 to compute arbitrary expressions from your raw data:

LOAD DATA INFILE myfile.csv 
INTO TABLE abc 
FIELDS TERMINATED BY  , 
(@ID, @AgeGroup)
SET ID = @ID
,   AgeGroup = CAST(@AgeGroup AS UNSIGNED)

(see: http://dev.mysql.com/doc/refman/5.1/en/load-data.html





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签