我有一个csv文件,其中包含一些行,我想使用LOAD DATA INFILE
MySQL命令将其插入到MySQL表中。当我使用该命令,并且插入已准备就绪时,插入的特殊字符全部搞砸了。该文件正确存储字符(我想是这样的,因为当我用EditPlus这样的编辑器打开文件时,特殊字符都被破坏了,但是当用另一个编辑器打开时,如EmEditor,特殊字符正确显示),列将保留带有特殊字符的文字具有合理性utf8_general_ci
,并且它们是varchar
列或text
列。该表是InnoDB
表,其排序规则设置为utf8_general_ci
。我使用以下参数从MariaDB命令行运行LOAD DATA INFILE
命令:
LOAD DATA INFILE '/path/to/csv/file' INTO TABLE tablename FIELDS TERMINATED BY '|' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
编辑:在使用SET NAMES "utf8";
之前,我也尝试使用LOAD DATA INFILE
命令,但没有成功:|
答案 0 :(得分:1)
可能你的文件不是UTF8。在编辑器中,保存时,请检查文件的字符编码是否为UTF8。编辑器正确呈现字符的事实并不意味着它保存为UTF8。保存文件时,字符编码是一个选项,菜单中的某个文件属性(取决于编辑器)。
答案 1 :(得分:1)
MySQL需要知道保存文件的编码(字符集)才能正确读取和解释。
服务器使用由...指示的字符集
character_set_database
系统变量来解释信息 在文件中。SET NAMES
和character_set_client
的设置 不影响对输入的解释。如果输入文件的内容 使用与默认字符集不同的字符集,通常是 最好使用指定文件的字符集CHARACTER SET
条款。字符集binary
指定“否” 转换“。
找出实际保存文件的编码,或者从文本编辑器(已经正确解释字符的编辑器)以特定编码显式保存,然后将CHARACTER SET ...
添加到{{1}声明。有关详细信息,请参阅文档:http://dev.mysql.com/doc/refman/5.7/en/load-data.html