我的问题是现在在 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 还是旧的。
有人能解释一下吗?
目前,如果您想使用该字符集,仍然需要指定
utf8mb4
。
在我写这篇文章时,MySQL 的最新版本是 9.1。
https://dev.mysql.com/doc/refman/9.1/en/charset-unicode.html 说:
:utf8
的已弃用别名;请使用utf8mb3
来代替。utf8mb4
注意:
预计在 MySQL 的未来版本中将成为utf8
的别名。utf8mb4
https://dev.mysql.com/doc/refman/9.1/en/charset-unicode-utf8.html 说:
MySQL过去曾使用作为utf8
字符集的别名,但现在不推荐使用这种用法;在 MySQL 9.1 中,utf8mb3
语句和SHOW
表的列显示为INFORMATION_SCHEMA
。utf8mb3
已弃用并不意味着它已被更改。这意味着不鼓励使用别名“utf8”,但目前它仍然是
utf8mb3
的别名。
它们正在逐步淘汰
utf8mb3
,但是是逐渐的。例如,在最新版本的 MySQL 中,character_set_system
仍然硬编码为 utfmb3
。