一尘不染

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

mysql

  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));

阅读 294

收藏
2020-05-17

共1个答案

一尘不染

好答案@mvp!

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

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

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

2020-05-17