나는 csv를 입력으로 사용하는 스크립트를 개발 중이다. 그러면 파일을 읽고 그 내용을 mysql 데이터베이스에 삽입한다. 데이터를 데이터베이스에 삽입하는 중에 문제가 발생합니다. 그것은 UMLAUT를 임의의 문자로 변환합니다.PHP 스크립트를 사용하여 mysql 데이터베이스에 UMLAUT 삽입하기
FYI - 내 데이터베이스는 latin_german_ci에 있습니다. [나는 또한 UTF8로 변경하려고 시도했다]
웹 브라우저에 UMLAUT 문자를 표시 할 수 있지만 SQL 쿼리를 통해 데이터베이스에 삽입하려고하면 임의의 문자가 삽입됩니다.
<?php
function uploadCsv($filename){
echo "filename - ".$filename."<br/>";
if(isset($filename) || $filename == ""){ // return with an error msg.
}else{
$pos = stripos($filename, ".csv");
if($pos == 0 || $pos != strlen($filename)-4){
//echo "invalid format";
return ;
}
}
set_time_limit(0);
$error = "";
$row = 0;
$handle = fopen($filename, "r");
//echo "<br/>".$filename."<br/>";
//echo "<br/>".$handle."<br/>";
if($handle == null){
return "unable to process";
}
while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
if ($row == 0) {
// this is the first line of the csv file
// it usually contains titles of columns
// do nothing.
$num = count($data);
//echo "num - ".$num."<br/>";
if($num != 2){
// echo "returning back";
return "invalid CSV format.";
}
}
// this handles the rest of the lines of the csv file
$num = count($data);
$id = $data[0];
$inserQuery = "";
$inserQuery = "INSERT INTO `table` (
`ID` ,
`Productname`
)
VALUES (";
for ($c=0; $c < $num; $c++) {
if($c==0){
$inserQuery .= " '". utf8_encode($data[$c])."'" ;
}else{
$inserQuery .= ", '". utf8_encode($data[$c]) ."'" ;
}
}
$inserQuery .= ");";
echo $inserQuery."<br/>";
mysql_query($inserQuery);
if(mysql_affected_rows() == -1 || mysql_affected_rows() <1){
echo "error<br/>";
}else{
echo "row inserted - ".$row." with ID = ".$id." <br/>";
}
$row++;
}
fclose($handle);
return "1";
}
?>
도와주세요
....감사
그리고 CSV 파일의 인코딩과 사용자의 로케일 설정도 확인해야합니다. fgetcsv에 대한 PHP 설명서는 다음과 같이 설명합니다. * 참고 : 로케일 설정은이 기능에 의해 고려됩니다. LANG이 예인 경우 en_US.UTF-8,이 함수는 1 바이트 인코딩의 파일을 잘못 읽습니다. * – wimvds
Windows에서 CSV 파일의 로케일 설정을 변경하려면 어떻게해야합니까 ?? – mudit
CSV를 만든 프로그램에 따라 다릅니다 (예 : Excel에서는 기본 문자 세트 (적어도 내가 아는 한)가 붙어 있습니다. –