- ベストアンサー
固定長のバイナリの格納
固定長のバイナリを格納したいのですが、最も効率の良い格納方法はなんなのでしょうか? CHAR BINARYでいけると思ったのですが、どんなときも"データがカラムに対して長すぎる。"(実際はカラム幅はデータより大分大きく取ってある)とエラーが出てしまいます。 TINYBLOBしか道はないのでしょうか? 1バイト余分容量を使う、また固定長でないために効率が悪くなってしまうことが嫌なのですが。。 どなたか解決方法がないか教えていただけると嬉しいです _ _
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実は私も詳しくなくて、誘い水のごとく、前回投稿したのでした^^; バイナリ格納は、勉強中で実は私が教えていただきたいところ^^;;; エライ人が補足してくれると思ったのですが、残念。 無い知識で考えてみると、逆質問も混じりで以下。 ・Blobや、char(255)だとinsertできるのか? ・insertでデータをhex関数で変換して格納。unhexで戻す手法。
その他の回答 (1)
- mooboogie
- ベストアンサー率68% (28/41)
Mysqlバージョンと、実際に発行しているInsert文、文字コードなどを付け加えるとレスが付き易いかもしれませんねぇ。 そのエラーは、1406 (22001): Data too long for column ~ というやつではないですか? だとすると、文字コードの問題もあり?という気がします。 となると使用されているバージョン表記は必須になるようです。 ちなみにわたしの使用している環境は、4.0と5.0ですが、 char binaryカラムへのインサートにおいて、まったく同じコマンドで5.0ではエラーになったりします。
補足
ご回答ありがとうございます。情報不足、申し訳ありません。 仰るとおり、MySQLは5.1.11で文字コードはUTF8です。エラーの内容も同じです。 発行した文は、PHPのPDOで$sth = $dbh->prepare('INSERT INTO test5 SET test = ?'); $sth->execute(array(バイナリデータの入った変数));という文を発行しています。 恐らく'INSERT INTO test10 SET test = 'バイナリデータ';'と同義かと思われます。 また、インサート前に'SET NAMES BINARY;'を発行しています。 テーブルの作成文は以下の通りです。 create table test10 ( hash char(20) binary not null ); ちょうどバイナリデータは20バイトなので、上記のテーブル作成文ではchar(20)としたのですが、char(50)でも同様のエラーが出てしまいました。 アドバイスいただけると嬉しいです _ _
お礼
返信ありがとうございます。 最新の英文マニュアルを読んでみたところ、binaryという型があるのを知り、binary(20)でいけました。 ちなみに、blob→ok、char→ngです~。 > hex そういう手もあるのですが、やはり処理ロスが;