位串类型
位串就是一串由1和0组成的字符串。它们可以用于存储位掩码。M-Compatibility支持的位串类型请参见表1。
|
名称 |
描述 |
存储空间 |
|---|---|---|
|
BIT[(n)] |
位串就是一串由1和0组成的字符串。它们可以用于存储位掩码。 n是指位串长度, 取值范围为[1,64],如不带精度n,默认精度为1。 |
最大为64字节。 |
- 如果用户明确地把一个位串值转换成BIT(n),则此位串右边的内容将被截断或者在右边补齐零,直到刚好n位,而不会返回出任何错误。
- 如果用户输出位串值,将会把原有数据的位串值以字符串形式输出。参见示例。
- BIT类型支持位串输入和普通字符串输入。参见示例。
- sql_mode参数值包含“strict_trans_tables”时,非法输入或者超过范围会报错,不包含时非法输入或者超过范围存入当前长度的最大值。
- JDBC&&PBE场景下通过setBytes或setBinaryStream向BIT列插入数据时,如果字节流不是4字节对齐的。M-Compatibility中会因为数据不完整,无法成功插入并提示报错。使用setString方法替代setBytes方法。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
--创建表。 m_db=# CREATE TABLE bit_type_t1 ( BIT_COL BIT(64) ); -- 插入数据。 m_db=# INSERT INTO bit_type_t1 VALUES (b'101'); -- 查询表中数据。 m_db=# SELECT * FROM bit_type_t1; bit_col --------- 101 (1 row) --删除表。 m_db=# DROP TABLE bit_type_t1; --创建表。 m_db=# CREATE TABLE bit_type_t2 ( BIT_COL BIT(3) ); --严格模式下插入的数据长度超过类型规定的长度报错。 m_db=# SET SQL_MODE = 'strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero, no_auto_create_user,no_engine_substitution'; SET m_db=# INSERT INTO bit_type_t2 VALUES (b'10101'); ERROR: bit string too long for type bit varying(3) CONTEXT: referenced column: bit_col --宽松模式下插入的数据长度超过类型规定的长度提示warning,数据取长度内最大值插入。 m_db=# SET SQL_MODE = ''; SET m_db=# INSERT INTO bit_type_t2 VALUES (b'10101'); WARNING: bit string too long for type bit varying(3) CONTEXT: referenced column: bit_col INSERT 0 1 --查询表中的数据。 m_db=# SELECT * FROM bit_type_t2; bit_col --------- 111 (1 row) --删除表。 m_db=# DROP TABLE bit_type_t2; |