sql >> データベース >  >> RDS >> Mysql

MYSQL-66キロバイトの行サイズ制限を回避する方法

    受け入れられた答えは間違っています(または少なくともかなり意見が分かれています)-バックアップ手順とトランザクションクエリの点で複雑になるため、データベースの外部にデータを保存することは個人的には望んでいません。

    他の人が指摘しているように、マニュアルには、BLOB列とTEXT列は合計行サイズにカウントされないと繰り返し記載されていますが、残念ながら、デフォルトの構成設定ではそうではなく、このエラーメッセージが表示されます。 (エラーメッセージは、問題に対処するためにVARCHARではなくTEXTを使用するように指示しているため、意味がありません。これはすでに発生しています。)

    この制限の理由は、デフォルトのストレージメカニズムであるAntelope<です。 / a> 、行の可変長列の最初の768バイトを格納します。可能な解決策は、INNODBを使用して、ストレージメカニズムを代替のバラクーダ ストレージメカニズム:

    SET GLOBAL innodb_file_format=Barracuda;
    

    この設定は新しいデータベースファイルのデフォルトであるため、これはすぐには効果がありません。したがって、データベース全体を削除して再作成する必要があります。

    または、(上記のように)Barracudaに切り替えてから、(さらに)テーブルごとのファイル戦略に切り替えます。

    SET GLOBAL innodb_file_per_table=ON;
    

    繰り返しになりますが、両方の設定が新しいテーブルのデフォルトであるため、これはすぐには効果がありません。そのため、テーブルを削除して再作成する必要があります。

    これを行った後にMySQLデータフォルダを見ると、別々のファイルが作成されたことを確認できます。 「data」という名前のデータベースと「test」という名前のテーブルの場合、「data / test/bigtable.ibd」という名前のファイルが表示されます。

    MySQLでグローバル設定を変更したくない場合は、SET SESSIONを試してください。 SET GLOBALの代わりに 、例: CREATE TABLEを実行する直前 ステートメント。



    1. OracleManagedODP.NETがtnsnames.oraを見つけることができません

    2. mySQL MONTH()を取得して先行ゼロを使用しますか?

    3. mysqlテーブルに格納できる行数を制限するにはどうすればよいですか?

    4. mysqlテーブルをlatin1からutf8に変換する