文字コード情報の保有場所

一つめ、上位層、st_table_share構造体@struct.h

typedef struct st_table_share {
  CHARSET_INFO *table_charset;
  /* 他省略 */
}

二つめ、上位層、Field_strクラス@field.h

class Field :public Field {
protected:
  CHARSET_INFO *field_charset;
public:
  CHARSET_INFO *charset(void) const { return field_charset; }
  /* 他省略 */
}

三つめ、myisam、いろいろ。

typedef struct st_mi_isam_share {
  MI_KEYDEF *keyinfo;  /* Key definitions */
  HA_KEYSEG *keyparts; /* key part info */
  /* 他省略 */
}

typedef struct st_mi_keydef {
  HA_KEYSEG *seg,*end;
  /* 他省略 */
}

typedef struct st_HA_KEYSEG             /* Key-portion */
{
  CHARSET_INFO *charset;
  /* 他省略 */
}

mi_create関数とかから触る場合には、HA_KEYSEGを見ればいいのかなー?



追記:20070111
HA_CREATE_INFOを構築する時に、Fieldオブジェクトとかに(server==>db==>table==>column)とマージされた最終的な文字コードがセットされている。これを見るのが一番楽っぽい。