栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PHP / PDO / MySQL:插入MEDIUMBLOB会存储错误数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP / PDO / MySQL:插入MEDIUMBLOB会存储错误数据

在我看来,这似乎是个错误:为什么连接的字符集对二进制列的数据有任何影响,特别是当使用PARAM_LOB将其标识为PDO本身为二进制时?

我认为这一定不是错误。我可以想象,每当客户端与服务器对话并说以下命令位于UTF-8中,而服务器需要使用Latin-1时,则查询可能会在解析和执行之前得到重新编码。因此,这是数据传输的编码问题。由于整个查询之前的解析将受到此重新编码的影响,因此BLOB列的二进制数据也将发生变化。

从Mysql手册中:

服务器在收到语句后应将其转换为什么字符集?

为此,服务器使用character_set_connection和collat​​ion_connection系统变量。它将客户端发送的语句从character_set_client转换为character_set_connection(具有诸如_latin1或_utf8之类的介绍符的字符串文字除外)。collat​​ion_connection对于比较文字字符串很重要。对于将字符串与列值进行比较,collat​​ion_connection无关紧要,因为列具有自己的排序规则,排序规则优先级更高。

或在返回途中:来自商店的Latin1数据将转换为UTF-8,因为客户端告诉服务器它更喜欢使用UTF-8进行运输。

您命名的PDO本身的标识符看起来完全不同:

PDO :: PARAM_LOB 告诉PDO将数据映射为流,以便您可以使用PHP Streams
API对其进行操作。(参考)

我不是MySQL专家,但是我会这样解释。客户端和服务器需要协商使用的是哪些字符集,我认为他们这样做是有原因的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号