mysql + importing a file with spaces in the column headers + how to handle
我有一个csv文件,我想导入到mysql中,并且我正在慢慢地到达那里。
我正在尝试使用加载数据内嵌,但首先必须创建表,这就是我的问题所在。
我尝试导入的文件.csv如下所示(但对于本例"rec open date",它只有1列):
1 2 |
现在,我希望表中的列标题与csv文件相同,但我无法使用"or"来工作,如下面的eg1和eg2所示。我可以让它工作的方法是用表格标题中的下划线替换空格,即"rec open date"转到"rec_open_date"。但这将涉及更改csv文件中的列标题名称,即用表标题中的下划线替换空格。这对我来说似乎是最好的选择,但有人能给我其他的建议吗?理想情况下,我希望csv文件列标题与数据表标题相同,而eg3似乎是实现这一点的方法。
EG1:
1 2 3 4 5 6 7 8 9 | 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 ; 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> |
表皮生长因子2
1 2 3 4 5 6 7 8 9 | 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> |
EG3:
1 2 3 4 5 6 7 8 | 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> |
注释在eg3之后,创建表,然后我将执行以下操作,但文件中的列标题必须与数据表中的列标题相同,正如我理解的那样。
mysql load data语句按位置而不是按名称从文件中加载值。
MySQL对字段的"名称"(来自.csv文件的标题行)没有任何要求,"匹配"任何列名称。(系统的其他组件可能有这种类型的需求,但MySQL加载数据没有。)
.csv文件没有标题行是有效的。当有标题行时,我们通常使用
另外,我更喜欢在LOAD DATA语句中使用关键字
在MySQL中,可以使用反勾号字符来转义标识符(列名、表名)。要使用包含无效字符(如空格)的标识符,必须对该标识符进行转义。
在我的键盘上,后退键是左上角`~的键,就在 1的左边!密钥。
安西语录
如果
1 2 3 4 5 6 7 8 9 |
然后:
如果
要点:使用反勾字符来转义标识符(列名、表名等),并在字符串文本周围使用单引号。避免在字符串文本周围使用双引号,以使您的SQL代码即使在设置了ansi_引号的情况下也能工作。