Documentation Home

13.1.17.7 设置 NDB 注释选项

在 NDB Cluster 中,CREATE TABLEorALTER TABLE 语句中的列注释也可用于指定 NDB_COLUMN选项。NDB 7.3 和 7.4 支持单列注释选项 MAX_BLOB_PART_SIZE;此选项的语法显示如下:

COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE[={0|1}]'

符号及其后面的=值是可选的。使用 0 或 1 以外的任何值都会导致语法错误。

此选项的作用是将 TEXTor 列的 blob 部分大小设置为(13948)BLOB支持的最大字节数。NDB此选项可应用于 MySQL 支持的任何 blob 列类型,但TINYBLOBor TINYTEXT ( BLOB, MEDIUMBLOB, LONGBLOB, TEXT, MEDIUMTEXT, orLONGTEXT除外)。

要查看此选项的效果,我们首先在mysql客户端中运行以下 SQL 语句来创建一个包含两BLOB列的表,一列 ( c1) 没有额外选项,另一列 ( c2) 包含 MAX_BLOB_PART_SIZE

mysql> 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 实用程序以获取有关刚创建的表的信息,如本例所示:

$> 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; 对于列c1c2它在此处以强调文本显示。对于c1,blob 部分大小为 2000,默认值;对于c2,它是 13948,由 设置 MAX_BLOB_PART_SIZE

NDB您可以使用如下语句更改表 的给定 blob 列的 blob 部分大小, ALTER TABLE然后使用以下语句验证更改SHOW CREATE TABLE

mysql> 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 部分大小已按预期更改:

$> 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 进行在线操作”)。

有关如何NDB 存储 blob 类型的列的更多信息,请参阅 字符串类型存储要求