mysql+;导入列标题中带有空格的文件+;如何处理

mysql+;导入列标题中带有空格的文件+;如何处理,mysql,csv,Mysql,Csv,我有一个csv文件,我想导入mysql,我正在慢慢地实现 我正在尝试使用,但首先我必须创建表,这就是我的问题所在 我尝试导入的文件.csv如下所示(但对于本例“Rec Open Date”,它只有一列): EG2 EG3: 注意 在EG3之后,创建表之后,我将执行以下操作,但据我所知,文件中的列标题必须与datatable中的列标题相同 将数据本地填充“file.csv”加载到以“,”结尾的表test1234列中MySQL LOAD DATA语句按位置而不是按名称从文件中加载值 MySQL对字段

我有一个csv文件,我想导入mysql,我正在慢慢地实现

我正在尝试使用,但首先我必须创建表,这就是我的问题所在

我尝试导入的文件.csv如下所示(但对于本例“Rec Open Date”,它只有一列):

EG2

EG3:

注意 在EG3之后,创建表之后,我将执行以下操作,但据我所知,文件中的列标题必须与datatable中的列标题相同


将数据本地填充“file.csv”加载到以“,”结尾的表test1234列中

MySQL LOAD DATA语句按位置而不是按名称从文件中加载值

MySQL对字段的“名称”没有任何要求(从.csv文件的头行开始)“匹配”任何列名。(您系统的其他组件可能有这种需求,但MySQL加载数据没有。)

.csv文件没有标题行是有效的。当有标题行时,我们通常使用
IGNORE 1line
来“跳过”它

另外,我更喜欢在LOAD DATA语句中使用关键字
字段
,而不是


在MySQL中,标识符(列名、表名)可以使用倒勾字符进行转义。若要使用包含无效字符(如空格)的标识符,必须对该标识符进行转义

CREATE TABLE ... 
... 
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^             ^
在我的键盘上,backtick是左上角的键`~就在1的左边!钥匙


ANSI_引号

如果
sql\u mode
变量包含
ANSI\u引号
,则还可以使用双引号转义标识符。e、 g

SHOW VARIABLES LIKE 'sql_mode' ;

SET sql_mode = 'ANSI_QUOTES,...' ;

SHOW VARIABLES LIKE 'sql_mode'

Variable_name  Value        
-------------  -----------
sql_mode       ANSI_QUOTES  
然后:

如果
sql\u模式
不包含
ANSI\u引号
(显式或包含在其他设置中),则标识符周围的双引号无效。在标识符周围使用单引号是行不通的。。。单引号将字符串文字括起来



要点:使用反勾号字符转义标识符(列名、表名等),并在字符串文本周围使用单引号。避免在字符串文字周围使用双引号,以使您的SQL代码即使在设置了ANSI_引号的情况下也能工作。

tks,这样我就可以使用倒勾来创建我的表
create table IF NOT EXISTS test1234(id int(11)NOT NULL自动递增注释'primary key','Rec Open Date'Date NOT NULL注释'Rec Open Date',primary key(id))ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='datatable demo table'AUTO_INCREMENT=64如何加载文件
将数据本地填充'head_test_1col.csv'加载到以','结尾的表test1234列中
或此
将数据本地填充'head_test_1col.csv'加载到表test1234
中不起作用,我的表中有全零。获取“全零”听起来好像第一个字段不是有效的数值。如果字段值用双引号括起。如果包含“可选地由“”括起”,则加载数据可以删除双引号“在LOAD DATA语句中。MySQL希望日期字段为YYYY-MM-DD格式。如果字段的格式不同,则可以将字段加载到用户定义的变量中,例如
@udv2
,并在SET子句中使用表达式将值转换为日期,例如
`Rec Open DATE`=STR_to_DATE(@udv2,'%m/%d/%Y')
mysql> ^MCREATE TABLE IF NOT EXISTS test1234 (
    ->   id int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
    ->   "Rec Open Date" Date NOT NULL COMMENT 'Rec Open Date',
    ->   PRIMARY KEY (id)
    -> ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=64 ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"Rec Open Date" Date NOT NULL COMMENT 'Rec Open Date',
  PRIMARY KEY (id)
) ENGI' at line 3
mysql>
mysql> CREATE TABLE IF NOT EXISTS test1234 (
    ->   id int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
    ->   Rec_Open_Date Date NOT NULL COMMENT 'Rec Open Date',
    ->   PRIMARY KEY (id)
    -> ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=64 ;
Query OK, 0 rows affected (0.00 sec)

mysql>
CREATE TABLE ... 
... 
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^             ^
SHOW VARIABLES LIKE 'sql_mode' ;

SET sql_mode = 'ANSI_QUOTES,...' ;

SHOW VARIABLES LIKE 'sql_mode'

Variable_name  Value        
-------------  -----------
sql_mode       ANSI_QUOTES  
CREATE TABLE ... 
... 
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^             ^