切换到 utf8mb4 后 MySQL INSERT 丢失信息

标签 mysql pdo character-encoding insert utf8mb4

我正在到处寻找这个问题的答案,但似乎仍然找不到

Server : localhost
MySQL Version : 5.6.17

我已将数据库表设置为 utf8mb4 以升级到更多字符可能性。当我将某些散列信息插入表中时,根据字符串中字符的随机序列,实际上只插入字符串的一部分(如果不是完全空白)。

在我的 pdo 语句句柄中,我在准备查询之前执行 charset=utf8mb4 ,并且为了安全起见,我之前也设置了 NAMES utf8mb4 。所以我认为一切都应该与 CHARSET 和 COLLATE 保持一致。

所以我的问题是,我应该做什么才能成功地将整个字符串放入字段中?是否有一些角色逃脱了我应该做的事情,而我却失踪了?

编辑:当我将字符串复制/粘贴到 phpmyadmin 中时,它成功地将整个字符串放入字段中。

最佳答案

让我们看看截断字符串的十六进制。

可能的答案在于无法通过 SET NAMES utf8mb4 或连接调用上的某些参数确定客户端正在使用 utf8mb4。

http://php.net/manual/en/ref.pdo-mysql.connection.php

关于切换到 utf8mb4 后 MySQL INSERT 丢失信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32449805/

相关文章:

mysql - 按数据mysql分区

php - 根据时间戳字段之间的差异过滤 MySQL 查询

php - 设置配置选项 '--with-pdo-odbc=unixODBC'时,PHP编译过程因错误而停止

c - 如何使用移位序列输出另一个字符集中的字符

php - 通过多个属性选择产品,使用 AND 代替 OR 连接符,数据模型 EAV

mysql - 从 Matlab 运行存储过程仅返回 1 行

php - fetchAll() 的奇怪行为 - PDO

php - MySQL 过程不返回第一行

ruby - 将 latin1 字符串转换为 utf8?

python - 为什么这个土耳其字符在我小写时会被损坏?