有几种方法可以设置数据库的字符编码。推荐的方法是附加;charset=charsetName到 dsn 字符串。但较旧的 PHP 版本会忽略此选项。在这里,我们将探索为数据库设置字符编码的所有可用选项:
在 dsn 字符串中指定字符集
要获取 UTF-8 字符集,您可以在 DSN 中指定:
...
$dsn = 'mysql:host=localhost; dbname=test; charset=UTF8';
$dbh = new PDO($dsn, $user, $password);
通过SET NAMES utf8执行指定字符集
在 PHP 5.3.6 之前,该charset选项被忽略。对于旧版本,请使用以下方法:
//For PHP version earlier to 5.3.6)
$dbh = new PDO($dsn, $user, $password);
$dbh->exec('set names utf8');
如果还需要设置排序规则:
$dbh->exec('set names utf8 COLLATE collateName');
//For utf8 the default collation is utf8_general_ci
$dbh->exec('set names utf8 COLLATE utf8mb4_unicode_ci');
在 PDO 构造函数的第四个参数中指定字符集
您还可以通过为 PDO 构造函数的第四个参数创建选项数组来设置字符编码:
//For PHP version prior to 5.3.6)
$options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'];
$db = new PDO($dsn, $user, $password, $options);
注意:以上示例仅适用于 MySQL 数据库。
输出多字节(即 UTF-8)数据
处理多字节数据(例如 UTF-8)时,您必须:
-
使用 UTF-8 字符编码存储数据。
-
告诉 PHP 使用 UTF-8 字符编码。在 php.ini 文件中这样做是最简单的,如下所示:
default_charset = "UTF-8"; -
使用 UTF-8 字符编码显示数据:
-
对于 PHP 脚本和动态生成的 HTML 文件发送
content-type标头:<?php header('Content-Type: text/html; charset=utf-8');注意:您必须
header()在 PHP 返回任何输出之前使用该函数。 -
<meta charset="UTF-8"/>在 HTML 文件中包含此元标记。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> . . .
-
-
将您的代码编辑器或 IDE 配置为使用 UTF-8 字符编码,下图显示了 Notepad++ 代码编辑器的 utf-8 配置设置:


1051

被折叠的 条评论
为什么被折叠?



