gpt4 book ai didi

php - 在 php 和 mysql 中使用 utf8mb4

转载 作者:IT老高 更新时间:2023-10-28 23:52:14 26 4
gpt4 key购买 nike

我已经读到如果你对某个表/列使用编码utf8mb4,mysql >= 5.5.3 完全支持所有可能的字符http://mathiasbynens.be/notes/mysql-utf8mb4

看起来不错。只有我注意到 php 中的 mb_functions 没有!我在列表中的任何地方都找不到它:http://php.net/manual/en/mbstring.supported-encodings.php

我不仅读了东西,还做了一个测试。

我使用 php 脚本将数据添加到 mysql utf8mb4 表,其中内部编码设置为 UTF-8:mb_internal_encoding("UTF-8");

正如预期的那样,字符在数据库中看起来很乱。

知道如何让 php 和 mysql 使用相同的编码(可能是 4 个字节的编码)并且仍然完全支持任何世界语言吗?

还有为什么 utf8mb4 和 utf32 不一样?

最佳答案

MySQL 的 utf8 编码不是实际的 UTF-8。这是一种有点像 UTF-8 的编码,但只支持 UTF-8 支持的一部分。 utf8mb4实际 UTF-8。这种差异是 MySQL 的内部实现细节。两者在 PHP 端看起来都像 UTF-8。无论您使用 utf8 还是 utf8mb4,PHP 在这两种情况下都将获得有效的 UTF-8。

您需要确保 PHP 和 MySQL 之间的连接编码设置为 utf8mb4。如果设置为utf8,MySQL 将不支持所有字符。您可以使用 mysql_set_charset()、PDO charset DSN 连接参数或适合您选择的数据库 API 的任何其他方法来设置此连接编码。


mb_internal_encoding 只是为 $encoding 参数设置默认值,所有 mb_* 函数都有。与MySQL无关。

UTF-8 和 UTF-32 编码字符的方式不同。 UTF-8 对一个字符使用最小 1 个字节,最大为 4 个字节。UTF-32 始终对每个字符使用 4 个字节。 UTF-16 使用最少 2 个字节,最多 4 个字节。
由于其可变长度,UTF-8 有一点开销。在 UTF-16 中可以编码为 2 个字节的字符在 UTF-8 中可能需要 3 个或 4 个字节;另一方面,UTF-16 从不使用小于 2 个字节的。如果您要存储大量亚洲文本,UTF-16 可能会占用较少的存储空间。如果您的大部分文本是英语/ASCII,则 UTF-8 使用的存储空间较少。 UTF-32 总是使用最多的存储空间。

关于php - 在 php 和 mysql 中使用 utf8mb4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16893035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com