MySQL 8.0 和 PHP 8.1 中字符集 UTF8 / utf8mb4 的状态?

问题描述 投票:0回答:1

我的问题是现在在 MySQL 8.0 和 PHP 8.1 中指定字符集 UTF-8(真正的四字节 UTF-8)的最佳方法是什么,以及下面的示例是否指定真正的四字节 UTF -8,还是它的三字节子集?

我知道有很多很多关于这个问题的帖子,但其中大多数都是旧的。我知道在过去的糟糕日子里,有一个名为“utf8”的 MySQL 字符集,它是真正的 UTF-8 的三字节子集,要获得真正的四字节 UTF-8,您必须指定字符集“utf8mb4”。然而,我的印象是新版本的 MySQL 和 PHP 现在使用真正的 UTF-8。

我的 php.ini 文件(位于 /etc/php/8.1/cli/php.ini)包含以下几行:

; PHP's default character set is set to UTF-8.
; https://php.net/default-charset
default_charset = "UTF-8"

我一直在阅读本教程: https://www.phptutorial.net/php-pdo/pdo-connecting-to-mysql/

在讨论如何与 MySQL 数据库服务器建立 PDO 连接时,它说要使用以下数据源名称格式:

$dsn = "mysql:host=localhost;dbname=bookdb;charset=UTF8";

php.ini 文件或教程中都没有提及此 UTF-8/UTF8 是真正的四字节 UTF-8 还是旧的。

有人能解释一下吗?

php mysql utf-8 utf8mb4
1个回答
0
投票

目前,如果您想使用该字符集,仍然需要指定

utf8mb4

在我写这篇文章时,MySQL 的最新版本是 9.1。

https://dev.mysql.com/doc/refman/9.1/en/charset-unicode.html 说:

utf8
utf8mb3
的已弃用别名;请使用
utf8mb4
来代替。

注意:

utf8
预计在 MySQL 的未来版本中将成为
utf8mb4
的别名。

https://dev.mysql.com/doc/refman/9.1/en/charset-unicode-utf8.html 说:

MySQL过去曾使用

utf8
作为
utf8mb3
字符集的别名,但现在不推荐使用这种用法;在 MySQL 9.1 中,
SHOW
语句和
INFORMATION_SCHEMA
表的列显示为
utf8mb3

已弃用并不意味着它已被更改。这意味着不鼓励使用别名“utf8”,但目前它仍然是

utf8mb3
的别名。

它们正在逐步淘汰

utf8mb3
,但是是逐渐的。例如,在最新版本的 MySQL 中,
character_set_system
仍然硬编码为
utfmb3

© www.soinside.com 2019 - 2024. All rights reserved.