gpt4 book ai didi

php - 我怎样才能开始使用 utf8mb4 而不是 utf8?

转载 作者:行者123 更新时间:2023-11-30 21:22:03 24 4
gpt4 key购买 nike

我试着做 https://mathiasbynens.be/notes/mysql-utf8mb4但在我查询之后

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collat​​ion%';

传递了这个值:

+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+--------------------------+--------------------+

当我尝试用这样的“🛍”符号保存字符串时,它会向我发送消息 Incorrect string value: '\xF0

我阅读了很多相关内容,并尝试将存储这些数据的列、表和数据库从 utf8 切换到 utf8mb4。

我在 /etc/my.cnf 中设置了这些值

[client]
default-character-set = utf8mb4

[mysqld]
skip-character-set-client-handshake
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'

[mysql]
default-character-set = utf8mb4

我测试mysqld

ps -ax | grep mysqld
1409 ? Ssl 0:32 /usr/sbin/mysqld
9299 pts/1 S+ 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn mysqld

不确定,但 mysqld 必须包含我的配置文件 /etc/my.cnf 的路径,但它丢失了。

非常感谢您的帮助,如果我不尝试所有我知道的并且可以自己谷歌,我不会问。

小更新:

在我选择我的数据库use booster后我发现uf8mb4有更多的变量

关于我为所有数据库显示的 mysql 变量的日志,在我使用 booster(我的数据库)之后我发现有更多的 utf8mb4 变量:
+------------------------+------------------+
|变量名 |值(value) |
+------------------------+------------------+
|字符集客户端 | utf8mb4 |
|字符集连接 | utf8mb4 |
|字符集数据库 | utf8mb4 |
|字符集文件系统 |二进制 |
|字符集结果 | utf8mb4 |
|字符集服务器 |拉丁语1 |
|字符集系统 |编码器 |
|排序规则连接 | utf8mb4_general_ci |
|排序规则数据库 | utf8mb4_unicode_ci |
|整理服务器 | latin1_swedish_ci |
+------------------------+------------------+

最佳答案

您需要告诉 PHP 客户端您使用的是 utf8mb4,而不是 utf8。

  • 如果使用 mysqli,执行 $mysqli_obj->set_charset('utf8mb4');
  • 如果使用 PDO,请执行类似 $db = new PDO('dblib:host=host;dbname=db;charset=utf8mb4', $user, $pwd);
  • 或者,执行SET NAMES utf8mb4其中任何一个都会说客户端中的字节是 UTF-8 编码的。如果列定义不是 utf8mb4,则转换(如有必要)将在客户端和数据库之间发生。

关于php - 我怎样才能开始使用 utf8mb4 而不是 utf8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863370/

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