我正在使用.csv文件中的php和mysql LOAD DATA INFILE
有些单元格包含一个'€'
符号和一个数字,还有一个'$'
符号和一个数字,如:2.13€,5.4 $
当我将csv文件加载到表格时,正确插入带有'$'
符号的单元格,而带有'€'
的单元格为EMPTY。
相关列定义如下:
VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci
如何确保正确插入'€'
符号?
答案 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]