mysqlのvarcharストレージの長さ
P粉455093123
P粉455093123 2024-04-01 15:50:34
0
1
341

申し訳ありませんが、英語は私の母国語ではありません...:(

varchar の実際の長さが mysql .ibd ファイルにどのように格納されるかを理解したいと考えています。そこで、次のようなテストを行うことにしました:

リーリー

ultraEdit を使用して ibd ファイルを開くと、16 進数の varchar の長さは次のようになります。

  • HEX 01 は c4 の長さ、10 進数は 1
  • HEX 03 は c2 の長さ、10 進数は 3
  • HEX 04 は c1 の長さ、10 進数は 4

しかし、これらの列の値は短すぎて、カウントするには 1 バイトしか必要としないため、次のような別のテストを実行しました。 リーリー

その ibd ファイルは次のとおりです:

    「aaaa」はわずか 4 文字であるため、HEX 04 が c1 の長さになります。
  • HEX 7F は c2 の長さで、c2 = REPEAT('a',127)
  • であるため、10 進数で 127 になります。
  • ただし、C4 の長さは 16 進数では
64 81

、10 進数では 25729 です。 356以上。 2 つの 16 進数を追加しようとしましたが、10 進数の 64 81 = E5 は 229 であり、356 と等しくありません。 これは私を混乱させるので、c4 の 16 進数がこのように表示される理由と、

356

を確認する方法を知りたいです。

P粉455093123
P粉455093123

全員に返信(1)
P粉744691205

たぶんこれ:

  • x81 は 01、上位ビットがオンになります
  • 上位ビットは「この数値は連続している」ことを意味します
  • 続きはx64
  • これらの部分を組み合わせると、x0164 = 10 進数の 356
  • になります。

NULL フラグがどこにどのように表示されるかわかりましたか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート