13

mysqlを使用してデータベースに格納されるphpの配列の多くをシリアル化しています。

最終的な文字列の長さは、2000から100,000以上の間で大きく異なる可能性がありますが、これに最適な列タイプは何でしょうか。

私は現在それを設定していますLONGTEXTが、これはやり過ぎだと感じています!データベースはすでにアクティブであり、約300万行あります。これは、まもなく追加される新しい列です。

ありがとう

4

2 に答える 2

18

データのシリアル化には常に任意のBLOBデータ型を使用して、データが途切れたり、バイナリセーフな方法でシリアル化が中断されたりしないようにします。最終的な文字列の長さに最大値がない場合は、が必要になりますLONGBLOB。データが2^24文字を埋めないことがわかっている場合は、を使用できますMEDIUMBLOBMEDIUMBLOBは約16MBですが、LONGBLOBは約4GBなので、でかなり安全だと思いますMEDIUMBLOB

なぜバイナリデータ型なのですか?MySQLのテキストデータ型にはエンコーディングがあります。文字エンコードは、シリアル化されたデータが異なるエンコード間でどのように転置されるかに影響します。たとえば、Latin-1として保存され、UTF-8として読み取られる場合(たとえば、データベースドライバー接続のエンコード設定のため)、バイナリオフセットがシフトしたが、シリアル化されたデータがそのようなシフト用にエンコードされなかったため、シリアル化されたデータが破損する可能性があります。PHPのシリアル化された文字列はバイナリデータであり、特定のエンコーディングではありません。

于 2012-05-27T01:46:49.743 に答える
7

serialize()のPHPマニュアルに従って(Marc Bが指摘したように)BLOBを選択する必要があります。

「この[出力]はnullバイトを含む可能性のあるバイナリ文字列であり、そのように格納および処理する必要があることに注意してください。たとえば、serialize()出力は通常、CHARまたはテキストフィールド。"

ソース: http: //php.net/serialize

もちろん、サイズに関するJ.Moneyの入力も念頭に置く必要があります。BLOBにも制限があり、それを超える場合は、MEDIUMBLOBまたはLONG​​BLOBが必要になります。

于 2014-12-09T21:31:12.400 に答える