PHP / MySQL中charset的问题

时间:2014-02-23 10:47:10

标签: mysql utf-8 character-encoding special-characters iso-8859-1

我在PHP / MySQL中遇到一些特殊字符的问题(我不知道哪一个)。 然后,我使用php将数据存储在数据库中。我确保在存储数据之前添加此代码:

  header('Content-type:text/html; charset=utf-8');
  $link=mysqli_connect("host","user","","db") or die(mysqli_error($link));
  mysqli_query($link,"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8';SET NAMES utf8");

我还确保Apache使用正确的字符集:

AddDefaultCharset utf-8

此外,我还尝试在每个html页面上添加meta标记:

<meta http-equiv="content-type" content="text/html" charset="UTF-8">

此外,我以php格式保存了所有htmlUTF-8个文件。 我注意到如果我在页面中写了一个像ò这样的字符并显示该页面就会正确显示。如果我从包含ò的数据库中获取字符串查询,则它无法正确显示,但如果我将代码更改为:

header('Content-type:text/html; charset=iso-8859-1');

正确显示从DB检索到的查询,而不是正常写入。 那么,问题出在mysql charset上?如果我用之前的说明设置它会怎么样?

2 个答案:

答案 0 :(得分:0)

尝试使用http://fi2.php.net/mysqli_set_charset函数代替您现在使用的mysqli_query()。

答案 1 :(得分:0)

尝试将您存储此日期的列更改为utf8

这里有一些您可以使用的代码。

更改字符集/归类(database):

  

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8;

更改字符集/归类(table):

  

ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8;

更改字符集/归类(columns):

  

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;