mysql json中的字符集

问题描述

我有这个PHP脚本来获取

<?PHP
header("Content-type: application/json; charset=utf8_general_ci");
require_once('db.PHP');
$query = 'SELECT * FROM `hebreux`';
$stm = $db->prepare($query);
$stm->execute();
$rows = $stm->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($rows);

运行脚本时,我的值在下面

[{{“ francais”:“ Bonjour”,“ hebreux”:“ ???”,“ chemin”:“”},{“ francais”:“ Bonne semaine”,“ hebreux”:“? ??? ???“,” chemin“:”“}]

我的问题是为什么我有???而不是希伯来文字? 在我的MysqL数据库中,我显示了希伯来语值,其中希伯来语值是charset utf8_general_ci

谢谢您能帮助我。

解决方法

您应该调整2面 通过设置连接字符集在代码的一侧 通过从数据库开始连接后执行这些查询

header("Content-type:application/json;charset=utf8_general_ci");
require_once('db.php');
$sql = 'SET NAMES "UTF8"';
$stm = $db->prepare($sql);
$stm->execute();
$sql = 'SET CHARACTER SET utf8' ;
$stm = $db->prepare($sql);
$stm->execute()
$sql = "SET COLLATION_CONNECTION = 'utf8_unicode_ci'" ;
$stm = $db->prepare($sql) ;
$stm->execute()
 

$query = 'SELECT * FROM `hebreux`';
$stm = $db->prepare($query);
$stm->execute();
$rows = $stm->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($rows);

然后使用诸如Notepad ++之类的任何程序打开用于编写代码的文件,该程序允许您调整文件编码,然后将所有文件更改为 UTF-8-BOM

您可以通过任何方式调整数据库 如果您使用PHP≥5.3.6的PDO抽象层,则可以在DSN中指定字符集:

$dbh = new PDO('mysql:charset=utf8mb4');

如果使用的是mysqli,则可以调用set_charset():

$mysqli->set_charset('utf8mb4');       // object oriented style
mysqli_set_charset($link,'utf8mb4');  // procedural style

如果您坚持使用普通的mysql,但碰巧正在运行PHP≥5.2.3,则可以调用mysql_set_charset。

如果驱动程序未提供用于设置连接字符集的自身机制,则可能必须发出查询以告知MySQL您的应用程序希望如何对连接上的数据进行编码:SET NAMES'utf8mb4'。