可能重复:
UTF-8,一路过关斩将
您好我最近从Linux切换到freebsb我的服务器上,现在我的数据库出问题了。
当我尝试回声含A,A或O(瑞典字母)成为一个问号的字符串。 即:Söndag成为Sndag。 回声“A”; 作品。 $文件--mime test.php的test.php的:text / plain的; 字符集= utf-8的
test.php的
<?php
$a="å";
mysql_connect("localhost", "root", ":-)");
mysql_select_db("lidev");
$result=mysql_query("select * from DLG where dag='Onsdag'");
$row=mysql_fetch_array($result);
echo $row['dagens'];
echo "<br>";
echo mb_detect_encoding($row['dagens']);
?>
mb_detect_encoding()输出“UTF-8”我的MySQL表是utf8_general_ci。
我完全被卡住! 怎么了?
干杯!
好像你不使用UTF-8 无所不在 ,所以您的数据得到了在某些时候搞砸。 这取决于你在做什么,你就必须更改/添加以下点(最有可能它是一个或多个SET CHARSET
/ mysql_set_charset
你忘了):
告诉MySQL使用UTF-8。 要做到这一点,添加到您的my.cnf:
collation_server = utf8_unicode_ci character_set_server = utf8
与MySQL进行交互前,送出这两querys:
SET NAMES 'utf8'; CHARSET 'utf8';
或者,让我们打开连接后PHP这样做:
mysql_set_charset('utf8', $conn); // when using the mysql_-functions mysqli::set_charset('utf8') // when using mysqli
设置UTF-8作为数据库的默认字符集
CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
做同样的表:
CREATE TABLE `my_table` ( -- ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
假设客户端浏览器,服务内容为UTF-8和正确的头:
header('Content-type: text/html; charset=utf-8');
要真正确保浏览器的理解,加元标记:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
并且,最后但并非最不重要的,告诉浏览器使用UTF-8来提交表单
<form accept-charset="utf-8" ...>