变音符号显示为?在我的MySQL数据库中?

时间:2012-07-03 08:33:21

标签: php mysql diacritics

这是我当地的情景:

我有一个应用程序,它读取一些CSV文件并将内容编写到我的本地MYSQL数据库。内容包含变音符号,例如“ß”或“Ä”。本地一切正常,变音符号被写入数据库,并在应用程序内显示相关内容,读取数据库。

现在我把这个场景移到了亚马逊云上,突然“ß”变成了“?”在数据库中。我检查了程序从CSV文件中读取的内容,它仍然是“ß”。所以它必须是写入数据库我想,问题是,为什么这在本地工作但不在我的云服务器上?这是db问题还是PHP问题?

谢谢! :)

4 个答案:

答案 0 :(得分:2)

您是否检查了两个数据库的编码?很可能可能存在问题。

答案 1 :(得分:1)

您需要对数据库进行UTF-8编码。

这是一篇优秀的概述文章,解释了MySQL中的编码如何工作,以及多种修复方法:

http://www.bluebox.net/news/2009/07/mysql_encoding/

答案 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 ;