2011-12-15 7 views
3

私はjsonでエンコードされた文字列を圧縮してmysqlに格納しようとしていましたが、 "予期しない"エラーが発生しています。php/mysql:gzcompress-ed文字列をテキストmysqlフィールドに挿入するには?

私はまた、このようにaddslashesを使用しようとしました:

addslashes(gzcompress(json_encode($mystring))); 

そして

json_decode(gzuncompress(stripslashes($mystring))); 

を表示するには、しかし、それは私が言及したエラーで、挿入に失敗しました。

gzcompressをblobとして保存する必要がありますが、mysqlのテキストフィールドに格納する方法があると思っていましたので、dbを使いこなす必要はありません。

PS:

Warning: Unexpected character in input: '\' (ASCII=92) state=1

PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\x9C\xED}\x8Br\xDB...' for column 'field_text_value' at row 1.

+0

addslashesの代わりにmysql_real_escape_stringを使用してください(この問題を修正するとは限りませんが、一般的には意味します)。 addslashesはキャラクタセットを認識しませんが、mysql_real_escape_stringは実際にデータベース接続を認識し、より正確にデータをエスケープできます。 addslashes()はPHPが一度もやったことのないコーダーを助けようとした多くのものの1つです。 – Corbin

+0

Corbinにもお世話になりました。ところで、これをマイナスにした人は理由を説明してください。 – giorgio79

+0

*リレーショナル*データベースに "大きな配列"を格納することはほとんど意味がありません。 完全なエラーメッセージではなく、むしろスタブで質問すると、「予期せぬ/」の方がより意味のないものになります。あなたが明示的にそれ以外のことを言わない限り、コードのどの部分がこの*スタブ* –

答えて

10

ストアそれ:なぜあなたは同じようにそれを保存しないでください。 VARCHARまたは*TEXTフィールドに往復で生き残る方法でそれを保存する方法があったとしても、恐ろしい方法です。

とにかく圧縮が必要ですか?

また、MYSQLを圧縮することもできます。 INSERT INTO mytable (compressed_json) VALUE (COMPRESS('[\"the json\"]')

+0

ありがとうございます、私はわかりませんが、gzcompressは文字列を圧縮するうまい方法のように見えました。ブロブの方法を調べます。 – giorgio79

+1

gzcompressはバイナリデータを生成します。 'BLOB'カラムのデータ型はバイナリデータを格納します。 gzcompressを使用していない場合は、 'BLOB'を使用する点はありません。 (すべての "blob"は "mysql、これらのビットを書き換えようとはしません。これはテキストではなく、エンコーディングもありません" gzcompressか 'COMPRESS()'のどちらを使用するかは、 。) –

+0

ありがとうBLOBで動作します。とても有難い。 gzcompressを使用すると、スペースが大幅に少なくなります。 – giorgio79

0

データベースにgzip圧縮された文字列を追加したいと思う理由:いくつかはここにある完全なエラーメッセージを求めましたか? BLOBとして

mysql_real_escape_string(json_encode($myArray)))

+0

それは大きな配列です、私は圧縮がjsonエンコードされた文字列をさらに小さくすることを望んでいました。 – giorgio79

関連する問題