我有一个问题。我有excel文件保存为CSV,我需要用PHP读取该文件并插入到mysql但问题是使用char设置特定čćšđž。我尝试了utf8_encode()以及我能想到的几乎所有内容。
Examle:
它插入“Petroviæ”但它应该是“Petrović”
编辑:
<?php
mysql_connect("localhost", "user", "pw");
mysql_select_db("database");
$fajl = "Prodajna mreza.csv";
$handle = @fopen($fajl, "r");
if ($handle) {
$size = filesize($fajl);
if(!$size) {
echo "File is empty.\n";
exit;
}
$csvcontent = fread($handle,$size);
$red = 1;
foreach(explode("\n",$csvcontent) as $line) {
if(strlen($line) <= 20)
{
$red++;
continue;
}
if($red == 1)
{
$red++;
continue;
}
$nesto = explode(",", $line);
if($nesto[0] == '')
continue;
mysql_query("INSERT INTO table(val1, val2, val3, val4, val5, val6, val7, val8) VALUES ('".$nesto[0]."','".$nesto[1]."','".$nesto[2]."','".$nesto[3]."','".$nesto[4]."','".$nesto[5]."','".$nesto[6]."','".$nesto[7]."')");
$red++;
}
fclose($handle);
}
mysql_close();
?>
答案 0 :(得分:1)
首先关闭:使用此mysql扩展名为discouraged。所以你可能想切换到别的东西。另请注意,通过简单粘贴字符串来构成查询的方式使其容易受到SQL injection攻击。如果你真的确定在你阅读的文件内容中没有任何丑陋的惊喜,你应该这样做。
看来你的文件读取和客户端mysql代码都没有做与charset转换有关的任何事情,所以我假设那些只是传递字节,而不关心它们的解释。所以你只需要确保服务器正确解释这些字节。
从你给出的例子来看,ć变成了æ,我说你的文件在ISO-8859-2,但是数据库读的方式不同,很可能是ISO-8859-1。您应该确保您的数据库实际上可以接受其列的所有ISO-8859-2字符。阅读character set support上的MySQL手册,并将一些合适的默认字符集(可能在数据库级别上最佳)设置为utf8
(首选)或latin2
。您可能必须重新创建表才能应用此更改。
接下来,您应该设置连接的字符集以匹配文件的字符集。所以utf8
在这里肯定是错误的,latin2
是要走的路。
完成所有这些操作后,您还应确保为从数据库中读取的任何脚本正确设置内容。换句话说,生成的HTML的字符集必须与MySQL会话的character_set_results
匹配。否则,很可能事情在数据库中正确存储,但在向用户显示时仍然显示为已损坏。如果您有选择,我会说在这种情况下使用utf8
,因为这样做可以在需要时更容易包含不同的数据。
如果仍然存在一些问题,你应该确定它们是否在从文件读取到php时,与mysql交换数据,或者在HTML中显示结果时。字符串"Petrovi\xc4\x87"
是您示例的utf8
表示形式,"Petrovi\xe6"
是latin2
形式。您可以使用这些字符串明确地使用已知编码传递数据,或者根据其中一个字符串检查传入的传输值。
答案 1 :(得分:0)
如果文件和数据库排序规则都是utf-8,那么将csv从csv导入数据库应该不会有问题。
<?php
db = @mysql_connect('localhost', 'user', 'pass');
@mysql_select_db('my_database');
$CSVFile = "file.csv";
mysql_query('LOAD DATA LOCAL INFILE "' . $CSVFile . '" INTO TABLE my_table
FIELDS TERMINATED BY "," LINES TERMINATED BY "\\r\\n";');
mysql_close($db);
?>
答案 2 :(得分:-1)
你可以添加自己的。 CSV中的 phpmyadmin ...
导入 - &gt; format = csv并单击“import”
或者如果你不想使用phpmyadmin!
BULK INSERT csv_dump
FROM 'c:\file.csv'
WITH
(
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)