在 NDB Cluster 中,CREATE
TABLE
orALTER TABLE
语句中的列注释也可用于指定
NDB_COLUMN
选项。NDB 7.3 和 7.4 支持单列注释选项
MAX_BLOB_PART_SIZE
;此选项的语法显示如下:
Press CTRL+C to copyCOMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE[={0|1}]'
符号及其后面的=
值是可选的。使用 0 或 1 以外的任何值都会导致语法错误。
此选项的作用是将
TEXT
or
列的 blob 部分大小设置为(13948)BLOB
支持的最大字节数。NDB
此选项可应用于 MySQL 支持的任何 blob 列类型,但TINYBLOB
or
TINYTEXT
( BLOB
,
MEDIUMBLOB
, LONGBLOB
,
TEXT
,
MEDIUMTEXT
, orLONGTEXT
除外)。
要查看此选项的效果,我们首先在mysql客户端中运行以下 SQL 语句来创建一个包含两BLOB
列的表,一列 ( c1
) 没有额外选项,另一列 ( c2
) 包含
MAX_BLOB_PART_SIZE
:
Press CTRL+C to copymysql> CREATE TABLE test.t ( -> p INT PRIMARY KEY, -> c1 BLOB, -> c2 BLOB COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE' -> ) ENGINE NDB; Query OK, 0 rows affected (0.32 sec)
在系统 shell 中,运行ndb_desc 实用程序以获取有关刚创建的表的信息,如本例所示:
Press CTRL+C to copy$> ndb_desc -d test t -- t -- Version: 1 Fragment type: HashMapPartition K Value: 6 Min load factor: 78 Max load factor: 80 Temporary table: no Number of attributes: 3 Number of primary keys: 1 Length of frm data: 324 Row Checksum: 1 Row GCI: 1 SingleUserMode: 0 ForceVarPart: 1 FragmentCount: 2 ExtraRowGciBits: 0 ExtraRowAuthorBits: 0 TableStatus: Retrieved HashMap: DEFAULT-HASHMAP-3840-2 -- Attributes -- p Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY c1 Blob(256,2000,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_22_1 c2 Blob(256,13948,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_22_2 -- Indexes -- PRIMARY KEY(p) - UniqueHashIndex PRIMARY(p) - OrderedIndex
输出中的列信息列在
Attributes
; 对于列c1
,c2
它在此处以强调文本显示。对于c1
,blob 部分大小为 2000,默认值;对于c2
,它是 13948,由 设置
MAX_BLOB_PART_SIZE
。
NDB
您可以使用如下语句更改表
的给定 blob 列的 blob 部分大小,
ALTER
TABLE
然后使用以下语句验证更改SHOW CREATE
TABLE
:
Press CTRL+C to copymysql> ALTER TABLE test.t -> DROP COLUMN c1, -> ADD COLUMN c1 BLOB COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE', -> CHANGE COLUMN c2 c2 BLOB AFTER c1; Query OK, 0 rows affected (0.47 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE test.t\G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( `p` int(11) NOT NULL, `c1` blob COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE', `c2` blob, PRIMARY KEY (`p`) ) ENGINE=ndbcluster DEFAULT CHARSET=latin1 1 row in set (0.00 sec) mysql> EXIT Bye
ndb_desc 的输出显示列的 blob 部分大小已按预期更改:
Press CTRL+C to copy$> ndb_desc -d test t -- t -- Version: 16777220 Fragment type: HashMapPartition K Value: 6 Min load factor: 78 Max load factor: 80 Temporary table: no Number of attributes: 3 Number of primary keys: 1 Length of frm data: 324 Row Checksum: 1 Row GCI: 1 SingleUserMode: 0 ForceVarPart: 1 FragmentCount: 2 ExtraRowGciBits: 0 ExtraRowAuthorBits: 0 TableStatus: Retrieved HashMap: DEFAULT-HASHMAP-3840-2 -- Attributes -- p Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY c1 Blob(256,13948,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_26_1 c2 Blob(256,2000,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_26_2 -- Indexes -- PRIMARY KEY(p) - UniqueHashIndex PRIMARY(p) - OrderedIndex NDBT_ProgramExit: 0 - OK
必须使用复制来更改列的 blob 部分大小ALTER TABLE
;此操作不能在线执行(请参阅
第 18.6.12 节,“在 NDB Cluster 中使用 ALTER TABLE 进行在线操作”)。