CHARとVARCHARの違い


CHARとVARCHARの違い


CHAR

  • 固定長文字列タイプ
  • 最大長255
  • タイプのサイズでデータが入力されていない場合は、後続のスペース(mysql 8.0(正確にはどのバージョンから始まるか分からない)
  • がselectを消去してインポートする後続のスペース)をスペースで埋めます.
  • は固定長文字列タイプであるため、タイトルには長さの情報が記録されていない.
  • VARCHAR

  • 可変長文字列タイプ
  • 最大長255(5.3~65535)
  • 入力されたデータが
  • タイプのサイズでない場合、
  • に空間が割り当てられます.
  • ヘッダは、記録する長さ情報(255未満では1バイト、255以上では2バイト)
  • を含む.

    実習



    MySQL 8.0では、CHARでも後行スペースが消去され、データがインポートされます.この問題を解決するには、sql modeに「PAD CHAR TO FULL LENGTH」を設定するだけです.
    sql modeを設定する前に
    select char_length(char_column), char_length(varchar_column) from testtbl;
    select length(char_column), length(varchar_column) from testtbl;
    sql mode設定前のクエリー結果

    sql mode設定
    select char_length(char_column), char_length(varchar_column) from testtbl;
    select length(char_column), length(varchar_column) from testtbl;
    sql modeを設定したクエリーの結果

    これにより、「sql mode」を設定すると、CHARタイプが空になります.
    なお、ここでlength(varchar())の値が4であるのは、length()関数がStringのバイト長のみを返し、ヘッダ「data len」の1 byteを含まないためである.
    ソース
  • mysql document : The CHAR and VARCHAR Types