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

MySQLのVARCHARとTEXTの違い

    TL; DR

    TEXT

    • 65535文字の最大サイズを修正しました(最大サイズを制限することはできません)
    • 2 + cを取ります ディスクスペースのバイト。ここで、c は保存された文字列の長さです。
    • (完全に)インデックスの一部にすることはできません。プレフィックスの長さを指定する必要があります。

    VARCHAR(M)

    • Mの可変最大サイズ 文字
    • M 1〜65535である必要があります
    • 1 + cを取ります バイト(Mの場合 ≤255)または2 + c (256≤Mの場合 ≤65535)cのディスクスペースのバイト 保存された文字列の長さです
    • インデックスの一部にすることができます

    詳細

    TEXT 修正済み 2¹⁶-1 = 65535の最大サイズ 文字。
    VARCHAR 変数があります 最大サイズM 最大 M = 2¹⁶-1
    したがって、TEXTのサイズを選択することはできません ただし、VARCHARの場合は可能です 。

    もう1つの違いは、TEXTにインデックス(フルテキストインデックスを除く)を配置できないことです。 列。
    したがって、列にインデックスを付ける場合は、VARCHARを使用する必要があります。 。ただし、インデックスの長さも制限されていることに注意してください。そのため、VARCHAR 列が長すぎるため、VARCHARの最初の数文字のみを使用する必要があります インデックスの列(CREATE INDEX

    ただし、VARCHARも使用する必要があります 、可能な入力文字列の最大長がMのみであることがわかっている場合 、例:電話番号や名前など。次に、VARCHAR(30)を使用できます TINYTEXTの代わりに またはTEXT そして、誰かが3冊すべての「ロードオブザリング」の本のテキストを電話番号の列に保存しようとすると、最初の30文字だけが保存されます:)

    編集: データベースに保存するテキストが65535文字より長い場合は、MEDIUMTEXTを選択する必要があります。 またはLONGTEXT 、ただし注意してください:MEDIUMTEXT 最大16MBの文字列を格納します。LONGTEXT 最大4GB。 LONGTEXTを使用する場合 PHP経由でデータを取得します(少なくともmysqliを使用する場合) store_resultなし )、文字列全体をバッファリングできるようにするためにPHPが4 GBのメモリを割り当てようとするため、メモリ割り当てエラーが発生する可能性があります。これは、PHP以外の言語でも発生する可能性があります。

    ただし、常に 入力を確認してください(長すぎますか?奇妙なコードが含まれていますか?) データベースに保存します。

    注意:どちらのタイプでも、必要なディスク容量は、格納されている文字列の長さのみに依存し、最大長には依存しません。
    文字セットlatin1を使用し、テキスト「Test」をVARCHAR(30)に保存する場合 、VARCHAR(100) およびTINYTEXT 、常に5バイトが必要です(文字列の長さを格納するために1バイト、各文字に1バイト)。同じテキストをVARCHAR(2000)に保存する場合 またはTEXT 列の場合も同じスペースが必要になりますが、この場合は6バイトになります(文字列の長さを格納するために2バイト、各文字に1バイト)。

    詳細については、ドキュメント をご覧ください。 。

    最後に、TEXTの両方の通知を追加します およびVARCHAR は可変長のデータ型であるため、データを格納するために必要なスペースを最小限に抑える可能性があります。ただし、これにはパフォーマンスとのトレードオフが伴います。より良いパフォーマンスが必要な場合は、CHARのような固定長タイプを使用する必要があります 。このこちら について詳しくは、こちらをご覧ください。 。



    1. SQL Server(T-SQL)で高度なサーバー構成オプションを表示する

    2. PHPMyAdminを使用してユーザー'root'@'localhost'のアクセスが拒否されました

    3. sp_describe_first_result_setがSQLServerでどのように機能するか

    4. JavaScriptはMySQLと接続できますか?