这是我当地的情景:
我有一个应用程序,它读取一些CSV文件并将内容编写到我的本地MYSQL数据库。内容包含变音符号,例如“ß”或“Ä”。本地一切正常,变音符号被写入数据库,并在应用程序内显示相关内容,读取数据库。
现在我把这个场景移到了亚马逊云上,突然“ß”变成了“?”在数据库中。我检查了程序从CSV文件中读取的内容,它仍然是“ß”。所以它必须是写入数据库我想,问题是,为什么这在本地工作但不在我的云服务器上?这是db问题还是PHP问题?
谢谢! :)
答案 0 :(得分:2)
您是否检查了两个数据库的编码?很可能可能存在问题。
答案 1 :(得分:1)
您需要对数据库进行UTF-8编码。
这是一篇优秀的概述文章,解释了MySQL中的编码如何工作,以及多种修复方法:
答案 2 :(得分:0)
你可以使用:
iconv(“UTF-8”,“ISO-8859-1”,$ stringhere);
这会为你转换字符串
答案 3 :(得分:0)
这一切都取决于您上传CSV文件的方式 在将数据写入MySQL服务器之前,此代码可能有所帮助:
$Notes = $_POST['Notes']; // or contents of the CSV file- but split the data first according to newline etc.
$charset = mysqli_character_set_name($DBConnect);
printf ("To check your character set but not necessary %s\n",$charset);
$Notes = str_replace('"', '"', $Notes); //double quotes for mailto: emails.
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well
$zu = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é");
$Notes = str_replace($von, $zu, $Notes);
echo " Notes:".$Notes."<br>" ;
$Notes = mysqli_real_escape_string($link, $Notes); //for mysqli DB connection.
echo " Notes:".$Notes ;