在mysql db中存储中文字符不起作用

时间:2011-12-31 07:31:20

标签: php mysql sqlyog

我试图将中文字符存储在mysql数据库中,但它存储了一些杂乱的字符。 请帮忙.. 这是我的代码 -

<?php header("Content-Type: text/html; charset=UTF-8");
if(isset($_POST['submit']))
{
$conn=mysql_connect("localhost","root","") or die("CONNECTION FAILED"); 
 $db=mysql_select_db("mytest",$conn) or die("DATABASE DOES NOT EXISTS");
 mysql_query("SET character_set_client=utf8", $conn);
  mysql_query("SET character_set_connection=utf8", $conn);
mysql_query("INSERT INTO tbl_test(id,name)
VALUES (null, '".$_POST['fname']."')") or die(mysql_error());
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="" method="post">
Name: <input type="text" name="fname" />
<input type="submit" name="submit" />
</form> 
</body>
</html>

1 个答案:

答案 0 :(得分:1)

欢迎来到Charset Hell。

在PHP中,要使用某个字符集,绝对必须在同一个字符集中。如果您打算使用UTF8,那么一切都需要是UTF8。数据库需要使用UTF8作为其字符集,脚本和数据库之间的连接需要是UTF8(看起来你已经处理好了),PHP脚本本身需要保存为UTF8文件(没有BOM,因为有了BOM会让你以后遇到更多麻烦),浏览器必须在UTF8中查看脚本生成的页面(你应该使用header()命令发送一个指定内容类型的头文件这个)。

如果链中的任何链接不是UTF8,那么对于在一个字符编码中有效但在另一个字符编码中有效的某些字符序列,您最终会显示垃圾。虽然PHP具有在字符集之间进行转换的功能,但它很快就会变得混乱,最好避免使用。