本節提供有關 Column
類別的資訊,該類別為 NDBCLUSTER
資料表中的欄位建模。
- 父類別
- 子類別
無
- 說明
-
Column
的每個執行個體都以其類型為特徵,該類型由許多類型規範決定內建類型
陣列長度或最大長度
精確度和刻度 (目前未使用)
字元集 (僅適用於使用字串資料類型的欄位)
內嵌和部分大小 (僅適用於 blob 欄位)
這些類型通常對應於 MySQL 資料類型及其變體。資料格式與 MySQL 中的相同。NDB API 不支援建構此類格式;但是,它們會由
NDB
核心檢查。 - 方法
-
下表列出此類別的公用方法以及每個方法的用途或用法
表 2.6 Column 類別方法與說明
方法 說明 Column()
類別建構函式;也有複製建構函式 ~Column()
類別解構函式 equal()
比較 Column
物件getArrayType()
取得欄位的陣列類型 getAutoIncrement()
顯示欄位是否自動遞增 getCharset()
取得字串 (文字) 欄位使用的字元集 (不適用於未儲存字元資料的欄位) getColumnNo()
取得欄位編號 getDefaultValue()
傳回欄位的預設值 getInlineSize()
取得 blob 欄位的內嵌大小 (不適用於其他欄位類型) getLength()
取得欄位的長度 getName()
取得欄位的名稱 getNullable()
檢查是否可將欄位設定為 NULL
getPartitionKey()
檢查欄位是否為資料表分割索引鍵的一部分 getPartSize()
取得 blob 欄位的部分大小 (不適用於其他欄位類型) getPrecision()
取得欄位的精確度 (僅用於小數類型) getPrimaryKey()
檢查欄位是否為資料表主索引鍵的一部分 getScale()
取得欄位的刻度 (僅用於小數類型) getSize()
取得元素的大小 getSizeInBytesForRecord()
根據欄位的類型取得 NdbRecord
的欄位所需空間 (在 NDB 7.4.7 中新增)getStripeSize()
取得 BLOB 欄位的條帶大小 (不適用於其他欄位類型) getStorageType()
取得此欄位使用的儲存類型 getType()
取得欄位的類型 ( Type
值)setArrayType()
設定欄位的 ArrayType
setAutoIncrement()
設定欄位的自動遞增旗標 setAutoIncrementInitialValue()
設定自動遞增欄位的起始值 setCharset()
設定包含字元資料的欄位所使用的字元集 (不適用於非文字欄位) setDefaultValue()
設定欄位的預設值 setInlineSize()
設定 blob 欄位的內嵌大小 (不適用於非 blob 類型的欄位) setLength()
設定欄位的長度 setName()
設定欄位的名稱 setNullable()
切換欄位的可 Null 性 setPartitionKey()
判斷欄位是否為資料表分割索引鍵的一部分 setPartSize()
設定 blob 欄位的部分大小 (不適用於非 blob 類型的欄位) setPrecision()
設定欄位的精確度 (僅用於小數類型) setPrimaryKey()
判斷欄位是否為主索引鍵的一部分 setScale()
設定欄位的刻度 (僅用於小數類型) setStorageType()
設定此欄位要使用的儲存類型 setStripeSize()
設定 blob 欄位的條帶大小 (不適用於非 blob 類型的欄位) setType()
設定欄位的 Type
- 類型
-
這些是
Column
類別的公用類型表 2.7 Column 類別類型與說明。
類型 說明 ArrayType
指定欄位的內部儲存格式 StorageType
判斷欄位是儲存在記憶體中還是在磁碟上 類型
欄位的資料類型。 NDB
欄位具有與 MySQL 中相同的資料類型
此類別的指定 (=
) 運算子會經過多載,使其始終執行深度複製。
使用此類別建立的欄位無法被 MySQL 伺服器看到。這表示 MySQL 用戶端無法存取這些欄位,而且這些欄位也無法被複製。基於這些原因,通常最好避免使用它們。
在 NDB API 中,欄位名稱是以區分大小寫的方式處理。(這與 MySQL C API 不同。)為了減少出錯的可能性,建議您使用一致的大寫或小寫來命名所有欄位。
如同其他資料庫物件,使用 NDB API 建立的 Column
物件以及對現有欄位所做的屬性變更,MySQL 無法看到。例如,如果您使用 Column::setType()
變更欄位的資料類型,MySQL 會認為欄位的類型沒有變更。關於欄位的唯一例外是,您可以使用 Column::setName()
變更現有欄位的名稱。
摘要
本節提供關於 ArrayType
資料類型的資訊,它代表欄位的內部屬性格式。
固定儲存格式速度較快,但通常也比變動格式需要更多空間。預設情況下,對於 Var*
類型為 ArrayTypeShortVar
,對於其他類型為 ArrayTypeFixed
。預設值通常就已足夠。
- 說明
-
您可以使用類別建構函式建立新的
Column
或複製現有的欄位。使用 NDB API 建立的
Column
對 MySQL 伺服器來說是不可見的。NDB API 以區分大小寫的方式處理欄位名稱。例如,如果您建立一個名為 「myColumn」 的欄位,您將無法稍後使用名稱 「Mycolumn」 來存取它。您可以藉由始終使用大寫或小寫字母來命名所有欄位,以減少因欄位名稱大小寫錯誤而產生的錯誤。
- 簽章
-
您可以建立
Column
類別的新執行個體,或藉由複製現有的Column
物件。這兩種情況都顯示在此處-
新的
Column
的建構函式Column ( const char* name = "" )
-
複製建構函式
Column ( const Column& column )
-
- 參數
在建立
Column
的新執行個體時,建構函式會採用單一引數,即要建立的新欄位的名稱。複製建構函式也會採用一個參數,在此案例中,是對要複製的Column
執行個體的參考。- 傳回值
Column
物件。- 解構函式
Column
類別解構函式不採用任何引數,且不傳回任何內容 (void
)。
- 說明
此方法取得欄位的陣列類型。
- 簽章
ArrayType getArrayType ( void ) const
- 參數
無.
- 傳回值
ArrayType
;請參閱 Column::ArrayType 以取得可能的值。
- 說明
此方法顯示欄位是否為自動遞增欄位。
- 簽章
bool getAutoIncrement ( void ) const
- 參數
無.
- 傳回值
如果欄位是自動遞增欄位,則為
TRUE
,如果不是,則為FALSE
。
- 說明
-
此方法取得文字欄位所使用的字元集。
此方法僅適用於
Type
值為Char
、Varchar
或Text
的欄位。NDB API 以區分大小寫的方式處理欄位名稱;「myColumn」 和 「Mycolumn」 不會被視為參考相同的欄位。建議您始終使用大寫或小寫字母來命名所有欄位,以將因欄位名稱大小寫錯誤而產生錯誤的可能性降至最低。
- 簽章
CHARSET_INFO* getCharset ( void ) const
- 參數
無.
- 傳回值
指向指定字元集和定序的
CHARSET_INFO
結構的指標。這與 MySQLMY_CHARSET_INFO
資料結構相同;如需更多資訊,請參閱 MySQL 手冊中的 mysql_get_character_set_info()。
- 說明
此方法取得欄位在其所屬的表格或索引中的序號。如果欄位是索引的一部分(例如,由
getColumn()
傳回時),它會對應到它在該索引中的位置,而不是在包含索引的表格中的位置。- 簽章
int getColumnNo ( void ) const
- 參數
無.
- 傳回值
欄位編號,以整數表示。
- 說明
-
取得欄位的預設值資料。
若要判斷表格是否有任何包含預設值的欄位,請使用
Table::hasDefaultValues()
。 - 簽章
const void* getDefaultValue ( unsigned int* len = 0 ) const
- 參數
len
保留預設值資料的長度,如果欄位為可為 Null 或沒有預設值,則保留 0。- 傳回值
預設值資料。
- 說明
-
此方法擷取 blob 欄位的內嵌大小,也就是要儲存在表格 blob 屬性中的初始位元組數。這部分通常位於主記憶體中,並且可以編製索引。
此方法僅適用於 blob 欄位。
從 NDB 8.0.29 開始,您也可以在 mysql 用戶端中透過查詢
ndbinfo.blobs
表格來取得此資訊。 - 簽章
int getInlineSize ( void ) const
- 參數
無.
- 傳回值
blob 欄位的內嵌大小,以整數表示。
- 說明
此方法取得欄位的長度。這可以是欄位的陣列長度,或對於變動長度的陣列,則是最大長度。
- 簽章
int getLength ( void ) const
- 參數
無.
- 傳回值
欄位的(最大)陣列長度,以整數表示。
- 說明
-
此方法會傳回呼叫它的欄位的名稱。
NDB API 以區分大小寫的方式處理欄位名稱。例如,如果您擷取特定欄位的名稱 「myColumn」,嘗試使用名稱 「Mycolumn」 來存取此欄位會失敗,並顯示 Column is NULL 或 Table definition has undefined column 等錯誤。您可以藉由始終使用大寫或小寫字母來命名所有欄位,以減少出錯的可能性。
- 簽章
const char* getName ( void ) const
- 參數
無.
- 傳回值
欄位的名稱。
- 說明
此方法用於判斷是否可將欄位設定為
NULL
。- 簽章
bool getNullable ( void ) const
- 參數
無.
- 傳回值
布林值:如果可將欄位設定為
NULL
,則為true
,否則為false
。
- 說明
-
此方法用於檢查欄位是否為表格分割索引鍵的一部分。
分割索引鍵是一組屬性,用於將元組分配到資料節點上。此索引鍵是
NDB
儲存引擎特有的雜湊函式。其中一個有用的範例是涉及多個倉庫和區域的庫存追蹤應用程式,其中將倉庫 ID 和區域 ID 用作分割索引鍵可能很好。這會將特定區域和倉庫的所有資料放置在相同的儲存節點中。在每個片段的本機,仍會使用完整的主要索引鍵搭配此案例中的雜湊演算法。
如需關於 MySQL 中分割、分割配置和分割索引鍵的詳細資訊,請參閱 MySQL 手冊中的 分割。
唯一支援與
NDB
儲存引擎搭配使用的使用者定義分割類型是金鑰分割,包括線性金鑰分割。 - 簽章
bool getPartitionKey ( void ) const
- 參數
無.
- 傳回值
如果欄位是表格分割索引鍵的一部分,則為
true
,否則為false
。
- 說明
-
此方法用於取得 BLOB 欄位的 blob 部分大小,也就是儲存在 blob 表格之每個元組中的位元組數。
此方法僅適用於 BLOB 欄位。
在 NDB 8.0.29 和更新版本中,您也可以在 mysql 用戶端或其他 MySQL 用戶端中透過查詢
ndbinfo.blobs
表格來取得此資訊。 - 簽章
int getPartSize ( void ) const
- 參數
無.
- 傳回值
欄位的部分大小,以整數表示。在
Tinyblob
欄位的情況下,此值為0
(也就是只會儲存內嵌位元組)。
- 說明
-
此方法取得欄位的精確度。
此方法僅適用於十進位欄位。
- 簽章
int getPrecision ( void ) const
- 參數
無.
- 傳回值
欄位的精確度,以整數表示。精確度定義為有效位數;如需更多資訊,請參閱 MySQL 手冊中 數值資料類型 中對於
DECIMAL
資料類型的討論。
- 說明
此方法用於判斷欄位是否為表格主要索引鍵的一部分。
- 簽章
bool getPrimaryKey ( void ) const
- 參數
無.
- 傳回值
布林值:如果欄位是此欄位所屬表格的主要索引鍵的一部分,則為
true
,否則為false
。
- 說明
-
此方法取得用於十進位欄位值的刻度。
此方法僅適用於十進位欄位。
- 簽章
int getScale ( void ) const
- 參數
無.
- 傳回值
十進位欄位的刻度,以整數表示。十進位欄位的刻度表示小數點後可儲存的位數。此值可能為
0
。如需更多資訊,請參閱 MySQL 手冊中 數值資料類型 中對於DECIMAL
資料類型的討論。
- 說明
此方法取得欄位的儲存類型。
- 簽章
StorageType getStorageType ( void ) const
- 參數
無.
- 傳回值
一個
StorageType
值;有關此類型的更多資訊,請參閱 Column::StorageType。
- 說明
此方法取得 blob 欄位的條帶大小—也就是說,每個節點群組中要儲存的連續部分數量。
- 簽章
int getStripeSize ( void ) const
- 參數
無.
- 傳回值
欄位的條帶大小,以整數表示。
- 說明
此方法取得欄位的資料類型。
- 簽章
Type getType ( void ) const
- 參數
無.
- 傳回值
欄位的
Type
(資料類型)。有關可能值的列表,請參閱 Column::Type。
- 說明
設定欄位的陣列類型。
- 簽章
void setArrayType ( ArrayType type )
- 參數
一個
Column::ArrayType
值。有關更多資訊,請參閱 Column::ArrayType。- 傳回值
無.
- 說明
使欄位自動遞增(或不遞增)。
- 簽章
void setAutoIncrement ( bool flag )
- 參數
一個布林值:
TRUE
使欄位自動遞增;FALSE
移除欄位的此屬性。- 傳回值
無.
- 說明
設定自動遞增欄位的初始值。
- 簽章
void setAutoIncrementInitialValue ( Uint64 value )
- 參數
欄位的初始值(一個 64 位元整數)。
- 傳回值
無.
- 說明
-
此方法可用於設定
Char
、Varchar
或Text
欄位的字元集和校對。此方法僅適用於
Char
、Varchar
和Text
欄位。使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setCharset ( CHARSET_INFO* cs )
- 參數
此方法接受一個參數。
cs
是指向CHARSET_INFO
結構的指標。有關更多資訊,請參閱 Column::getCharset()。- 傳回值
無.
- 說明
-
如果欄位有預設值,此方法會將欄位值設定為其預設值;否則,它會將欄位設定為
NULL
。若要判斷表格是否有任何包含預設值的欄位,請使用
Table::hasDefaultValues()
。 - 簽章
int setDefaultValue ( const void* buf, unsigned int len )
- 參數
此方法接受 2 個引數:一個值指標
buf
;以及資料的長度len
,以有效位元組數表示。對於固定大小的類型,這是類型大小。對於可變長度類型,buffer
指向的前導 1 或 2 個位元組也包含該類型的正常大小資訊。- 傳回值
成功時為 0,失敗時為 1。
- 說明
-
此方法取得 blob 欄位的內嵌大小—也就是說,要儲存在資料表 blob 屬性中的初始位元組數。此部分通常保留在主記憶體中,並且可以編制索引和解譯。
此方法僅適用於 blob 欄位。
使用此方法對欄位所做的變更,MySQL 無法看見。從 NDB 8.0.30 開始,您可以在 mysql 用戶端中,藉由在欄位註解中設定
BLOB_INLINE_SIZE
作為CREATE TABLE
或ALTER TABLE
的一部分,來變更 blob 欄位的內嵌大小。有關更多資訊,請參閱 NDB_COLUMN 選項。 - 簽章
void setInlineSize ( int size )
- 參數
整數
size
是 blob 欄位新的內嵌大小。- 傳回值
無.
- 說明
-
此方法設定欄位的長度。對於可變長度陣列,這是最大長度;否則,它是陣列長度。
使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setLength ( int length )
- 參數
此方法接受單一引數—整數值
length
是欄位的新長度。- 傳回值
無.
- 說明
-
此方法用於設定欄位的名稱。
setName()
是唯一一個其結果可從 MySQL 伺服器看見的Column
方法。MySQL 無法看見使用 NDB API 對現有欄位所做的任何其他變更。 - 簽章
void setName ( const char* name )
- 參數
此方法接受單一引數—欄位的新名稱。
- 傳回值
此方法 無。
- 說明
-
此方法切換欄位的可空性。
使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setNullable ( bool nullable )
- 參數
一個布林值。使用
true
可以將NULL
插入到欄位中;如果nullable
為false
,則此方法會執行與在 MySQL 中將欄位變更為NOT NULL
等效的操作。- 傳回值
無.
- 說明
-
此方法可將欄位新增至其所屬資料表的分割索引鍵,或從資料表的分割索引鍵中移除欄位。
使用此方法對欄位所做的變更,MySQL 無法看見。
有關更多資訊,請參閱 Column::getPartitionKey()。
- 簽章
void setPartitionKey ( bool enable )
- 參數
單一參數
enable
是一個布林值。將true
傳遞給此方法會使欄位成為資料表分割索引鍵的一部分;如果enable
為false
,則會從分割索引鍵中移除該欄位。- 傳回值
無.
- 說明
-
此方法設定 blob 欄位的 blob 部分大小—也就是說,要儲存在 blob 資料表的每個元組中的位元組數。
此方法僅適用於 blob 欄位。
使用此方法對欄位所做的變更,MySQL 無法看見。您可以藉由在欄位註解中設定
MAX_BLOB_PART_SIZE
選項,作為CREATE TABLE
或ALTER TABLE
陳述式的一部分,在 mysql 或其他 MySQL 用戶端中,將 blob 欄位的 blob 部分大小增加到NDB
支援的最大值 (13948)。請參閱 NDB_COLUMN 選項。 - 簽章
void setPartSize ( int size )
- 參數
整數
size
是要儲存在 blob 資料表中的位元組數。對此值使用零表示只能儲存內嵌位元組,實際上會使欄位的類型為TINYBLOB
。- 傳回值
無.
- 說明
-
此方法可用於設定小數欄位的精確度。
此方法僅適用於十進位欄位。
使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setPrecision ( int precision )
- 參數
此方法接受單一參數—精確度是一個整數,也就是欄位新精確度的值。有關小數精確度和比例的更多資訊,請參閱 Column::getPrecision() 和 Column::getScale()。
- 傳回值
無.
- 說明
-
此方法用於使欄位成為資料表主索引鍵的一部分,或將其從主索引鍵中移除。
使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setPrimaryKey ( bool primary )
- 參數
此方法接受單一布林值。如果為
true
,則欄位會成為資料表主索引鍵的一部分;如果為false
,則會從主索引鍵中移除該欄位。- 傳回值
無.
- 說明
-
此方法可用於設定小數欄位的比例。
此方法僅適用於十進位欄位。
使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setScale ( int scale )
- 參數
此方法接受單一參數—整數
scale
是小數欄位的新比例。有關小數精確度和比例的更多資訊,請參閱 Column::getPrecision() 和 Column::getScale()。- 傳回值
無.
- 說明
-
此方法設定 blob 欄位的條帶大小—也就是說,每個節點群組中要儲存的連續部分數量。
此方法僅適用於 blob 欄位。
使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setStripeSize ( int size )
- 參數
此方法接受單一引數。整數
size
是欄位的新條帶大小。- 傳回值
無.
- 說明
設定欄位的儲存類型。
- 簽章
void setStorageType ( StorageType type )
- 參數
一個
Column::StorageType
值。有關更多資訊,請參閱 Column::StorageType。- 傳回值
無.
- 說明
-
此方法設定欄位的
Type
(資料類型)。setType()
會將所有欄位屬性重設為其(與類型相關的)預設值;當您變更給定欄位的屬性時,它應該是您呼叫的第一個方法。使用此方法對欄位所做的變更,MySQL 無法看見。
- 簽章
void setType ( Type type )
- 參數
此方法接受單一參數—欄位的新
Column::Type
。預設值為Unsigned
。有關所有允許值的列表,請參閱 Column::Type。- 傳回值
無.
本節提供有關 Type
資料類型的資訊,該類型用於描述欄位的資料類型。
- 說明
-
Column
物件的資料類型與 MySQL 使用的資料類型類似。類型Tinyint
、Tinyintunsigned
、Smallint
、Smallunsigned
、Mediumint
、Mediumunsigned
、Int
、Unsigned
、Bigint
、Bigunsigned
、Float
和Double
(也就是說,在列舉值表格中列出的順序中,從Tinyint
到Double
的類型)可以用於陣列中。請勿將
Column::Type
與Object::Type
混淆。 - 列舉值
-
下表顯示可能的值及其說明
表 2.10 欄位物件 Type 資料類型值和說明
名稱 說明 Undefined
Undefined Tinyint
1 位元組帶正負號整數 Tinyunsigned
1 位元組不帶正負號整數 Smallint
2 位元組帶正負號整數 Smallunsigned
2 位元組不帶正負號整數 Mediumint
3 位元組帶正負號整數 Mediumunsigned
3 位元組不帶正負號整數 Int
4 位元組帶正負號整數 Unsigned
4 位元組不帶正負號整數 Bigint
8 位元組帶正負號整數 Bigunsigned
8 位元組帶正負號整數 Float
4 位元組浮點數 Double
8 位元組浮點數 Olddecimal
MySQL 5.0 之前使用的帶正負號小數 (已過時) Olddecimalunsigned
MySQL 5.0 之前使用的不帶正負號小數 (已過時) Decimal
MySQL 5.0 及更高版本使用的帶正負號小數 Decimalunsigned
MySQL 5.0 及更高版本使用的不帶正負號小數 Char
1 位元組字元的固定長度陣列;最大長度為 255 個字元 Varchar
1 位元組字元的可變長度陣列;最大長度為 255 個字元 Binary
1 位元組二進位字元的固定長度陣列;最大長度為 255 個字元 Varbinary
1 位元組二進位字元的可變長度陣列;最大長度為 255 個字元 Datetime
一個 8 位元組的日期和時間值,精確度為 1 秒 (已棄用) Datetime2
一個 8 位元組的日期和時間值,帶有小數秒。 Date
一個 4 位元組的日期值,精確度為 1 天 Blob
二進位大型物件;請參閱第 2.3.13 節,「NdbBlob 類別」 Text
文字 Blob Bit
位元值;長度指定位元數 Longvarchar
2 位元組 Varchar
Longvarbinary
2 位元組 Varbinary
Time
不含日期的時間(已棄用) Time2
不含日期的時間,帶有秒的小數部分。 Year
1 位元組年份值,範圍為 1901-2155(與 MySQL 相同) Timestamp
Unix 時間(已棄用) Timestamp2
Unix 時間,帶有秒的小數部分。
NDB API 提供以微秒為單位存取時間類型(TIME
、DATETIME
和 TIMESTAMP
)的方式,分別以 Time2
、Datetime2
和 Timestamp2
表示。(Time
、Datetime
和 Timestamp
在相同版本中已被棄用。)使用 setPrecision()
來設定最多 6 位小數(預設值為 0)。資料格式與 MySQL 中的格式相同,且必須使用正確的位元組長度。
由於 NDB
可以將任何這些值作為二進位字串進行比較,因此它不會對實際資料執行任何檢查。