• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLにバイナリデータを正常に保存できない)

MySQLにバイナリデータを正常に保存できない

このQ&Aのポイント
  • 保存したいローカルファイルをMySQLにバイナリデータとして格納しようとしていますが、文字エンコードの問題でファイルが壊れてしまいます。
  • MySQLの文字コードはUTF8であり、画像ファイルは正常に表示されますが、xlsやpdfなどのファイルは開けません。
  • 提供されたPerlのコードでは、ファイルデータをバイナリモードで読み込み、DBに格納する処理が行われています。

質問者が選んだベストアンサー

  • ベストアンサー
  • amane123
  • ベストアンサー率60% (6/10)
回答No.2

>カラム属性のようなもの そうです。 すみません、「BN」ではなく、「BIN」でした。失礼しました。 DBの管理ツールとして「MySQL Workbench」などを使用しているとわかりやすいと思いますが、 「BIN」の他にも「PK」=プライマリキー、「NN」=not nullなどのチェックがあり、そういった設定項目の一つです。

rihm
質問者

お礼

回答ありがとうございます。 BIN=BINARYということですね。ありがとうございます。 WorkBenchを使用してないので普通のMySQLコマンドからではどう表示されるかわかりませんが、BLOB型を指定していたら自動でBINARYつくわけじゃないんですね。 調べていたところ、どうもBLOB型がわるかったらしく(64KBしか格納できない)画像はOKでxlsやpdfがファイル壊れていたのはファイルサイズの問題のようでした。バイナリデータが途中で切られているみたいです。 まだ実際に確認できてはいないのですがもっと大きい型にすればファイル壊れないですむのかな?と思っています。 お手数おかけしました。

rihm
質問者

補足

今手元に環境がないため、 vmwareで環境を作りMySQLに同じスクリプトからデータを突っ込んでみたのですがデータが壊れるということがありませんでした。 default-character-setとかそのあたり現象が発生した環境とは違いがあるのかもしれませんが、今環境がみれないのでそのあたりの違いはわかりません。 ただ気になったのが今作成した環境では日本語ファイル名でも文字化けは起こらず格納されたのですが問題の環境では日本語ファイルだと文字化けして保存されていたことです。 問題の環境は文字コードの設定に問題があるのかもしれません。

その他の回答 (1)

  • amane123
  • ベストアンサー率60% (6/10)
回答No.1

コードの問題ではなくて、カラムの設定の問題だと思います。 「BN」にチェックをつければバイナリデータを正常に保存できたはずです。

rihm
質問者

お礼

回答ありがとうございます。 MySQLのカラムを記載していませんでした。申し訳ありません。 バイナリデータを格納するfile_dataはBLOB型でカラムを作成しています。 BNがよくわからないのですが、カラム属性かなにかでしょうか。

関連するQ&A