mysql LOAD DATA INFILE失败,欧元符号'€'

时间:2013-06-20 10:54:37

标签: php mysql csv

我正在使用.csv文件中的php和mysql LOAD DATA INFILE 有些单元格包含一个'€'符号和一个数字,还有一个'$'符号和一个数字,如:2.13€,5.4 $
当我将csv文件加载到表格时,正确插入带有'$'符号的单元格,而带有'€'的单元格为EMPTY。 相关列定义如下:

VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci

如何确保正确插入'€'符号?

3 个答案:

答案 0 :(得分:4)

我转换了文件编码:

$data = file_get_contents(PATH_TO_CSV_FILE);
$data = mb_convert_encoding($data, 'UTF-8', 'Windows-1252');
file_put_contents(PATH_TO_MODIFIED_CSV_FILE, $data);

然后将其加载到表格中:

LOAD DATA INFILE '".PATH_TO_MODIFIED_CSV_FILE."' INTO TABLE ...

答案 1 :(得分:2)

尝试:

LOAD DATA INFILE '".PATH_TO_CSV_FILE."' INTO TABLE tbl_name CHARACTER SET latin1

latin1分别对应Windows-1252和CP-1252。

答案 2 :(得分:0)

我最终使用以下代码在必要时进行检测和转换:

<?php
# Detect and convert to utf-8
$data = file_get_contents($file_full_path);
if(mb_detect_encoding($str,"UTF-8, ISO-8859-1, Windows-1252") != "UTF-8") {
    $data = mb_convert_encoding($data, 'UTF-8', 'Windows-1252');
    file_put_contents($file_full_path, $data);
}

但是如果您知道要加载的文件的字符集是什么,那么您应该明确地使用MySQL命令,因为它在the documentation中说明:

  

character_set_database系统指示的字符集   变量用于解释文件中的信息。设置名称   而character_set_client的设置不影响解释   输入。如果输入文件的内容使用了一个字符集   与默认值不同,通常最好指定   使用CHARACTER SET子句的文件的字符集,即   从MySQL 5.1.17开始提供。二进制字符集指定“否”   转换“。

使用以下sintax:

LOAD DATA  INFILE 'file_name' INTO TABLE tbl_name [CHARACTER SET charset_name]