0

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

VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci

如何确保'€'正确插入标志?

4

3 回答 3

5

我转换了文件编码:

$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 ...
于 2013-06-20T11:48:19.490 回答
2

尝试:

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

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

于 2013-06-20T12:22:02.377 回答
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 命令,如文档中所述

character_set_database 系统变量指示的字符集用于解释文件中的信息。SET NAMES 和 character_set_client 的设置不影响输入的解释。如果输入文件的内容使用不同于默认的字符集,通常最好使用 CHARACTER SET 子句指定文件的字符集,该子句从 MySQL 5.1.17 开始可用。二进制字符集指定“不转换”。</p>

使用以下语法:

LOAD DATA  INFILE 'file_name' INTO TABLE tbl_name [CHARACTER SET charset_name]
于 2014-01-12T15:19:14.500 回答