当前位置: 首页 > 面试题库 >

是否使用MySQL中的当前/默认字符集转换了BLOB?

张浩阔
2023-03-14
问题内容
  1. 我有一个带有BLOB字段的表。
  2. 该表的字符集为Latin1。
  3. 我连接到数据库和“ SET CHARACTER SET utf8”。
  4. 然后,我将二进制数据保存到该字段中。
  5. 然后,我检索数据,这不是我保存的(损坏的)数据。

编码:

<?php
$pdo = new \PDO("mysql:host=127.0.0.1;dbname=***", '***', '***');

$pdo->exec('SET CHARACTER SET utf8');

$sql = "INSERT INTO pdo_blob (the_blob) VALUES(:the_blob)";
$insertStm = $pdo->prepare($sql);

$blob = (binary) file_get_contents('/home/***/test.pdf');
$insertStm->bindParam(":the_blob", $blob, \PDO::PARAM_LOB);
$insertStm->execute();

$selectStm = $pdo->prepare("SELECT the_blob FROM pdo_blob ORDER BY id DESC LIMIT 1");
$selectStm->execute();

$savedBlob = null;
$selectStm->bindColumn(1, $savedBlob, \PDO::PARAM_LOB);
$selectStm->fetch();

echo 'equal: ' . ((int) ($blob == $savedBlob));

问题答案:

好答案@mvp!

但是,当我的Web应用程序为UTF-8且数据库编码为时latin1,我 必须
设置character_set_clientcharacter_set_results

使用时SET CHARACTER SET utf8,出现了BLOB的问题。

但是当我使用SET NAMES utf8它时,它起作用了!



 类似资料:
  • 问题内容: 根据我对正则表达式的理解,字符串“ 00 ###”必须与“ [0-9]”匹配,但不能与“ ^ [0-9] $”匹配。但这不适用于Java regexp。 在对此问题进行了一些调查之后,我发现了以下信息(http://www.wellho.net/solutions/java-regular- expressions-in-java.html ): 似乎Java正则表达式默认同时带有^和

  • 使用Spring集成XML 3.0.0。版本I有一个XSLT转换器: 在不指定transformer factory类属性的情况下,Spring如何确定实际使用的TransformerFactory? TransformerFactory的JavaDoc。newInstance()状态: 获取TransformerFactory的新实例。此静态方法创建一个新的工厂实例此方法使用以下有序查找过程来确

  • 在步骤5.7->8.0.23中从5.6->5.7->8.0.23升级mysql时,我收到一个警告: 在'mysql-schema的默认字符集:utf8'中,'mysql'是什么意思?是Innodb吗?

  • 问题内容: 有一个MySQL 具有以下定义: 我想将此表的更改为。怎么做 ? 问题答案: 如果要将表和所有字符列更改为新字符集,请使用如下语句: 因此查询将是:

  • Logback 1.1.3留档没有指出如果用户不设置默认字符集,它将是什么,但源代码说: 默认情况下,此属性的值为null,对应于系统的默认字符集。 然而,我使用的是PatternLayoutCoder(带有滚动文件附加器),它似乎是以UTF-8格式输出文件(我的Windows 7 Professional系统的默认字符集可能不是UTF-8)。 UTF-8输出实际上是我想要的,但我想确保我不是偶然

  • 本文向大家介绍MySQL修改默认字符集编码的方法,包括了MySQL修改默认字符集编码的方法的使用技巧和注意事项,需要的朋友参考一下 今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了。 查看MySQL字符集的命令是“show variables like '%char%';”。 以MySQL5.6为例,默认的字符集为: 在工作中需要将字符集全部修改为