UTF8表中的字符编码

时间:2014-02-24 07:49:45

标签: php mysql utf-8 character-encoding

我使用以下sql创建了一个表:

CREATE TABLE fens_mng_people_utf8 (
  pidm varchar(16) NOT NULL default '',
  fname varchar(32) NOT NULL default '',
  mname varchar(32) default NULL,
  lname varchar(32) NOT NULL default '',
  KEY pidm (pidm)
)CHARACTER SET utf8
 DEFAULT CHARACTER SET utf8
 COLLATE utf8_general_ci
 DEFAULT COLLATE utf8_general_ci;

一些土耳其字符如Ş显示为html代码Ş,即使我直接使用sql插入文本文件也是如此。我正在从phpmyadmin查看它。

因此,当我尝试在我的php中执行此类操作时:

SELECT * FROM  fens_mng_people_utf8 WHERE fname = '$fname' and lname = '$lname'

它返回null,因为$fname$lname都正确显示土耳其语字符。

我要么在我的表格中正确显示土耳其字符,要么转换$fname,因为它会匹配我的数据库中的值。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您的架构看起来很好。检查这个sqlfiddle。它返回正确的行。 尝试在执行实际查询之前添加此内容:

mysql_query("SET NAMES utf8");

答案 1 :(得分:0)

数据库不会将任何内容转换为HTML实体,因为数据库与HTML无关。除非您自己使用htmlentities(),否则最可能的解释是浏览器正在向您发送编码数据,因为它无法正确处理字符。为什么不能处理这个角色呢?因为您没有正确指示浏览器使用UTF-8。您需要设置Content-Type: text/html; charset=utf-8 HTTP标头和/或设置<form ... accept-charset="utf-8">属性,以确保表单数据以UTF-8编码发送。

如果你没有,浏览器默认为Latin-1,则“Ş”不能用Latin-1编码,浏览器的唯一后备就是向你发送HTML实体。请参阅Handling Unicode Front To Back In A Web App