MySQL数据库

时间:2016-04-25 11:01:56

标签: mysql utf-8

我有一个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命令,但没有成功:|

2 个答案:

答案 0 :(得分:1)

可能你的文件不是UTF8。在编辑器中,保存时,请检查文件的字符编码是否为UTF8。编辑器正确呈现字符的事实并不意味着它保存为UTF8。保存文件时,字符编码是一个选项,菜单中的某个文件属性(取决于编辑器)。

答案 1 :(得分:1)

MySQL需要知道保存文件的编码(字符集)才能正确读取和解释。

  

服务器使用由...指示的字符集   character_set_database系统变量来解释信息   在文件中。 SET NAMEScharacter_set_client的设置   不影响对输入的解释。如果输入文件的内容   使用与默认字符集不同的字符集,通常是   最好使用指定文件的字符集   CHARACTER SET条款。字符集binary指定“否”   转换“。

找出实际保存文件的编码,或者从文本编辑器(已经正确解释字符的编辑器)以特定编码显式保存,然后将CHARACTER SET ...添加到{{1}声明。有关详细信息,请参阅文档:http://dev.mysql.com/doc/refman/5.7/en/load-data.html