存档

2010年2月 的存档

2010年的心愿

2010年2月14日 谭俊青 4 条评论

  今天是2010大年初一,祝兄弟朋友们在新年里健康快乐、美满幸福、万事如意、心想事成。
  也祝愿自己能多交几个好朋友。

吉祥如意

分类: 未分类 标签:

MySQL库目录下db.opt文件的作用

2010年2月6日 谭俊青 1 条评论

  细心的朋友可能会发现有时候在某些库目录下有个 db.opt 文件,那这个文件是干什么用的呢?如果你用vi等编辑器打开看的话,内容很简单,是用来记录该库的默认字符集编码和字符集排序规则用的。也就是说如果你创建数据库指定默认字符集和排序规则,那么后续创建的表如果没有指定字符集和排序规则,那么该新建的表将采用db.opt文件中指定的属性。

/*
  Set table default charset, if not set

  SYNOPSIS
    set_table_default_charset()
    create_info        Table create information

  DESCRIPTION
    If the table character set was not given explicitely,
    let’s fetch the database default character set and
    apply it to the table.
*/

static void set_table_default_charset(THD *thd,
                                      HA_CREATE_INFO *create_info, char *db)
{
  /*
    If the table character set was not given explicitly,
    let’s fetch the database default character set and
    apply it to the table.
  */

  if (!create_info->default_table_charset)
  {
    HA_CREATE_INFO db_info;

    load_db_opt_by_name(thd, db, &db_info);

    create_info->default_table_charset= db_info.default_table_charset;
  }
}

另外要说明的是,如果你是通过alter databases(schema) 命令更改的数据库默认属性,那么现有的表的默认字符集和排序规则不受影响。

通过创建数据库指定数据库的默认字符集和排序规则:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification]

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

也可以通过alter database修改

ALTER {DATABASE | SCHEMA} [db_name]
    alter_specification …
ALTER {DATABASE | SCHEMA} db_name
    UPGRADE DATA DIRECTORY NAME

alter_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

分类: MySQL 标签:

Blob/Text字段类型在MySQL Cluster中的处理

2010年2月3日 谭俊青 1 条评论

  MySQL Cluster ndb 引擎每行存储的实际长度最大为8052个字节。Blob和Text字段在ndb engine中只存储前面的256个字节。超过256自己部分存储在另外的隐藏表里面。根据字段类型,隐藏表分3种大小(chunk size)。

  • Blob/Text 2000B
  • MediumBlob/MediumText 4000B
  • LongBlob/LongText 8000B

  假如一个LongBlob字段是10,000个字节,那么需要2个chunk,第一个存储8000字节,另外一个存储剩下的2000字节。
  因此为了提高效率,如果我们存储的字段在8k(约)以内,那么在不超过8052字节限制的情况下,可以考虑用varbinary存储。比如比较典型的应用 session 管理。

分类: MySQL 标签: