row_format - [Mysql]

本文介绍了MySQL中的静态表和动态表的区别。静态表采用fixed行格式,所有记录长度固定,读取速度快但空间利用率较低;动态表采用dynamic行格式,记录长度可变,节省空间但读取速度相对较慢。此外还介绍了如何通过ALTER TABLE语句来修改表的行格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://cjbskysea.blogbus.com/logs/35012392.html

在mysql中,

若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表,即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。

若一张表里面存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫动态表,即该表的row_format是dynamic,就是说每条记录所占用的字节是动态的。其优点节省空间,缺点增加读取的时间开销。

row_format还有其他一些值:

DEFAULT
FIXED
DYNAMIC
COMPRESSED
REDUNDANT
COMPACT

修改行格式

ALTER TABLE table_name ROW_FORMAT = DEFAULT

修改过程导致:

fixed--->dynamic: 这会导致CHAR变成VARCHAR

dynamic--->fixed: 这会导致VARCHAR变成CHAR
在上文的基础上,帮我解读为什么下列代码运行至invo_cur_sheet.of_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,STRING(la_val),invo_fields[li_i].of_get_format(al_row))会报错。integer li_i integer li_ret = 1 integer li_res = 1 long ll_band_row integer li_merge_row long ll_band_col integer li_merge_col any la_val time lt_time datetime ldt_dtime date ld_date long ll_nested_rows long ll_nested_ret long ll_current_hsplit_values[] boolean lb_row_height_set = false if ib_variable_band_height or ib_has_reports or ib_nested then invo_hgrid = create n_dwr_grid invo_hgrid.ii_round_ratio = invo_hgrid.ii_round_init_ratio * id_conv if ib_nested then invo_parent_hgrid.of_get_split_values(ll_current_hsplit_values,il_band_y) invo_hgrid.of_add_splits(ll_current_hsplit_values,0) end if li_ret = of_dynamic_horisontal_layout(al_row) end if if al_row = 0 and il_dw_row_count = 0 and ib_nested then return il_row_cnt end if if ib_has_reports then for li_i = 1 to ii_fields_count if invo_fields[li_i].ii_dwo_type = 4 then ll_nested_ret = invo_fields[li_i].of_process_nested(al_row,al_writer_row,invo_hgrid) if ll_nested_ret > ll_nested_rows then ll_nested_rows = ll_nested_ret end if continue end if next end if il_row_cnt = 0 for li_i = 1 to ii_fields_count if invo_fields[li_i].ii_dwo_type = 4 then else if invo_fields[li_i].of_get_visible(al_row) <> 1 then else invo_fields[li_i].il_xsplit_ind_from = invo_vgrid.of_add_split(invo_fields[li_i].of_get_x1(al_row)) invo_fields[li_i].il_xsplit_ind_to = invo_vgrid.of_add_split(invo_fields[li_i].of_get_x2(al_row)) li_res = invo_vgrid.of_get_pos(invo_fields[li_i].il_xsplit_ind_from,invo_fields[li_i].il_xsplit_ind_to,ll_band_col,li_merge_col) if li_res <> 1 then else li_res = invo_hgrid.of_get_pos(invo_fields[li_i].il_ysplit_ind_from,invo_fields[li_i].il_ysplit_ind_to,ll_band_row,li_merge_row) if li_res <> 1 then else if il_row_cnt < ll_band_row + li_merge_row then il_row_cnt = ll_band_row + li_merge_row end if la_val = invo_fields[li_i].of_getvalue(al_row) if (li_merge_col > 0 or li_merge_row > 0) and invo_parm.ib_enable_merge_cells then choose case classname(la_val) case "integer", "decimal", "double" , "number", "real" invo_cur_sheet.of_merge_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,al_writer_row + ll_band_row - 1 + li_merge_row,ll_band_col - 1 + li_merge_col,double(la_val),invo_fields[li_i].of_get_format(al_row)) case "string", "char" invo_cur_sheet.of_merge_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,al_writer_row + ll_band_row - 1 + li_merge_row,ll_band_col - 1 + li_merge_col,string(la_val),invo_fields[li_i].of_get_format(al_row)) case "date" ld_date = la_val invo_cur_sheet.of_merge_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,al_writer_row + ll_band_row - 1 + li_merge_row,ll_band_col - 1 + li_merge_col,ld_date,invo_fields[li_i].of_get_format(al_row)) case "datetime" ldt_dtime = la_val invo_cur_sheet.of_merge_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,al_writer_row + ll_band_row - 1 + li_merge_row,ll_band_col - 1 + li_merge_col,ldt_dtime,invo_fields[li_i].of_get_format(al_row)) case "time" lt_time = la_val invo_cur_sheet.of_merge_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,al_writer_row + ll_band_row - 1 + li_merge_row,ll_band_col - 1 + li_merge_col,lt_time,invo_fields[li_i].of_get_format(al_row)) case else invo_cur_sheet.of_merge_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,al_writer_row + ll_band_row - 1 + li_merge_row,ll_band_col - 1 + li_merge_col,invo_fields[li_i].of_get_format(al_row)) end choose else choose case classname(la_val) case "integer", "decimal", "double" , "number", "real" invo_cur_sheet.of_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,double(la_val),invo_fields[li_i].of_get_format(al_row)) case "string", "char" invo_cur_sheet.of_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,STRING(la_val),invo_fields[li_i].of_get_format(al_row)) case "date" ld_date = la_val invo_cur_sheet.of_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,ld_date,invo_fields[li_i].of_get_format(al_row)) case "datetime" ldt_dtime = la_val invo_cur_sheet.of_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,ldt_dtime,invo_fields[li_i].of_get_format(al_row)) case "time" lt_time = la_val invo_cur_sheet.of_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,lt_time,invo_fields[li_i].of_get_format(al_row)) case else invo_cur_sheet.of_write(al_writer_row + ll_band_row - 1,ll_band_col - 1,invo_fields[li_i].of_get_format(al_row)) end choose end if if ib_yield_enable then yield() end if if ib_cancel then li_ret = -1 exit end if end if end if end if end if next if il_row_cnt < ll_nested_rows then il_row_cnt = ll_nested_rows end if if not ib_nested and not lb_row_height_set then if li_ret = 1 then of_set_row_height(al_writer_row) lb_row_height_set = true end if end if return il_row_cnt
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值