如何正确显示存储在MySQL数据库中的不可读字符

时间:2013-03-22 02:19:36

标签: php mysql

我将São Tomé and Príncipe存储在MySQL数据库中。

它在我的网页上显示为S�o Tom� and Pr�ncipe

无论如何直接从数据库中正确显示它?

我的MySQL类型为MyISAM,排序规则为utf8_general_ci

我的网页字符集是<meta charset="utf-8">

字段类型设置为varchar(30),字段排序规则与表格utf8_general_ci相同

PHP功能测试

utf8_decode()已将字符转换为S?o Tom? and Pr?ncipe htmlspecialchars_decode()已将字符转换为S�o Tom� and Pr�ncipe html_entity_decode()已将字符转换为S�o Tom� and Pr�ncipe quoted_printable_decode()已将字符转换为S�o Tom� and Pr�ncipe htmlentities()返回空白结果

让他们感谢@SAEVEN

在我的查询SELECT

之前执行此操作

mysqli_query($GLOBALS['db_link'], "SET NAMES 'utf8'");

1 个答案:

答案 0 :(得分:2)

是否需要在连接级别指定命名空间排序规则?

我认为你已经涵盖了基础知识,你的HTML标记中的字符串为utf8。

在执行任何数据库查询之前尝试执行此SQL语句:

'SET NAMES utf8'

例如,如果您使用的是PDO

// do your regular connection logic whatever it is
$dbc = new PDO( .... );
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbc->query( 'SET NAMES utf8' );

// run your queries beneath
....

或者可以使用简写

new PDO(
    'mysql:host=mysql.example.com;dbname=awesome_db',
    "username",
    "password",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

无论您使用哪种DBAL,该查询都会起作用。在拉动数据之前,只需在用于提取数据的同一连接上运行它(只需要执行一次)