简体   繁体   English

如何从SQL数据库检索UTF-8数据?

[英]How to retrieve UTF-8 data from SQL database?

After many attempts I couldn't get data from my database in a correct encoding (UTF-8) format. 经过多次尝试,我无法以正确的编码(UTF-8)格式从数据库中获取数据。

This is my connection(config.php) file: 这是我的connection(config.php)文件:

<?php
define("DB_HOST", "localhost");
define("DB_USER", "user");
define("DB_PASSWORD", "");
define("DB_DATABASE", "db");
$dbcon = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
?>

My php form for retriving data: 我的PHP表格检索数据:

<?php 

include('config.php');
$sqlget="SELECT * FROM table";
$sqldata= mysqli_query($dbcon, $sqlget) or die ('error');
mysqli_set_charset('utf8');
echo"<table>";
echo"</table";
?>

You're not sending the link identifier mysqli_set_charset($dbcon , "utf8"); 您没有发送链接标识符mysqli_set_charset($dbcon , "utf8");

from php manual: 从PHP手册:

bool mysqli_set_charset ( mysqli $link , string $charset ) bool mysqli_set_charset(mysqli $ link,字符串$ charset)

And set it before you execute the query. 并在执行查询之前进行设置。

setting encoding after SELECT is a bit late SELECT 之后设置编码有点晚
set it before running any query 在运行任何查询之前进行设置

<?php
define("DB_HOST", "localhost");
define("DB_USER", "user");
define("DB_PASSWORD", "");
define("DB_DATABASE", "db");
$dbcon = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
mysqli_set_charset('utf8');

The simplest way of achieving that is running any of these: 实现这些目标的最简单方法是运行以下任何一种方法:

// for procedural MySQL (obsolete in PHP 5.4/5.5!)
mysql_query("SET NAMES 'utf8';", $link);

// for procedural MySQLi
mysqli_query("SET NAMES 'utf8';", $link);

// for MySQLi, function notation
mysqli_set_charset($link, "utf8");

// for MySQLi, method notation
$mysqli->set_charset("utf8");

// for PDO
$pdo = new \PDO("mysql:host={$host};dbname={$database};charset=utf8", $user, $password);

That will guarantee the retrieved data will be returned with UTF-8 encoding. 这将确保检索到的数据将以UTF-8编码返回。

Hope that helps :) 希望有帮助:)

尝试在查询之前设置字符集。

Order is important. 顺序很重要。 You need to set connection encoding before you start executing queries, otherwise it's just too late: 您需要在开始执行查询之前设置连接编码,否则为时已​​晚:

mysqli_set_charset('utf8');

shall be executed just after you connect: 连接后应立即执行:

<?php
define("DB_HOST", "localhost");
define("DB_USER", "user");
define("DB_PASSWORD", "");
define("DB_DATABASE", "db");
$dbcon = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);    
mysqli_set_charset('utf8');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM