gpt4 book ai didi

php - MySQL 不存储西里尔字符集

转载 作者:行者123 更新时间:2023-11-30 22:17:16 26 4
gpt4 key购买 nike

this 有几乎相同的问题.我有这个:

$name = "Ирина";

当我将它插入我的数据库时,我得到了这个:Ð〜рина。

这个函数:

print_r(mb_detect_encoding($name));

给我 UTF-8

下一步:

SHOW VARIABLES LIKE 'char%';

返回给我:

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

结果是:

SHOW CREATE TABLE my_db.main; 

我得到:ENGINE=InnoDB DEFAULT CHARSET=utf8

数据库是用这个语句创建的:

CREATE DATABASE IF NOT EXISTS my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

当我应用查询时 SET NAMES 'utf8'; 信息正确存储。最后,问题是:为什么我需要在连接开始时执行此查询?

附言未指定 MySQL 中的 --skip-character-set-client-handshake

最佳答案

ИринаИрина的Mojibake .

尝试使用 utf8/utf8mb4 时,如果看到 Mojibake,请检查以下内容。此讨论也适用于不一定可见的双重编码

  • 要存储的字节需要进行utf8编码。
  • INSERTing时的连接和 SELECTing text需要指定utf8或者utf8mb4。 ( new PDO('...;charset=UTF8', ...); )
  • 列需要声明CHARACTER SET utf8 (或 utf8mb4)。
  • HTML 应以 <meta charset=UTF-8> 开头.

要检查数据是否正确存储,SELECT col, HEX(col) FROM ... . Ирина 的 utf8 编码的十六进制是D098 D180 D0B8 D0BD D0B0 .相反,如果您得到 C390 CB9C C391 E282AC C390 C2B8 C390 C2BD C390 C2B0 , 然后是 INSERT被搞砸了。

关于php - MySQL 不存储西里尔字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864340/

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