我使用的是一个.csv文件中的php和mysql LOAD DATA INFILE。
有些单元格包含'€'符号和数字,有些单元格包含'$'符号和数字,例如:2.13欧元,5.4美元
当我将csv文件加载到表格中时,带有'$'符号的单元格被正确插入,带有'€'的单元格是空的。
相关列的定义如下:
VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci如何确保'€'标志正确插入?
发布于 2013-06-20 19:48:19
我转换了文件编码:
$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-20 20:22:02
尝试:
LOAD DATA INFILE '".PATH_TO_CSV_FILE."' INTO TABLE tbl_name CHARACTER SET latin1latin1对应于Windows-1252和CP-1252。
发布于 2014-01-12 23:19:15
如果有必要,我最终使用以下代码进行检测和转换:
<?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子句指定文件的字符集,该子句在MySQL 5.1.17中提供。二进制字符集指定“无转换”。
使用以下sintax:
LOAD DATA INFILE 'file_name' INTO TABLE tbl_name [CHARACTER SET charset_name]https://stackoverflow.com/questions/17211822
复制相似问题