YashanDB RAW类型数据

本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C/SQL%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/RAW.html

YashanDB中的RAW类型是一种与VARCHAR类似的可变长度数据类型,可以表述二进制数据或者字节字符串。

在定义表时,可以使用RAW类型声明一个列字段,通常被用于存储图形、声音、文档或二进制数据数组等内容,具体解释取决于使用情况。

存储属性


定义格式:

类型格式规则
RAWRAW(Size)变长二进制串,当插入的字符串小于Size时不会发生补0x00的行为。

Size:宽度,表示最大字节长度。

使用规则


# 使用限制

对于RAW类型数据的使用限制如下:

  • 不能作为索引列
  • 分布式部署中无法作为分区键

# 数据类型转换

YashanDB支持RAW和字符型的数据类型转换,包括显式转换和隐式转换。

YashanDB支持RAW和BLOB/ROWID/UROWID/JSON的数据类型转换,支持RAW往CLOB的单向数据类型转换。

显式转换

用户可使用CAST、TO_CHAR等内置函数进行RAW和字符型之间的数据类型转换。

示例

SELECT CAST('123' AS RAW(5)) raw_res FROM dual;
RAW_RES 

0123   

SELECT TO_CHAR(CAST('123' AS RAW(5))) char_res FROM dual;
CHAR_RES 

0123    

隐式转换

1.字符型向RAW类型隐式转换:

系统将连续输入的每个字符解析为二进制数据中四个连续位的十六进制表述,并将其连接后构建RAW类型数据。

输入的字符串中包含不属于十六进制表述范围(0-9、a-f、A-F)的字符时,系统报错。

如果输入字符串数量为奇数,系统将先补充4个都是0的连续位,然后再将字符串转换为RAW类型数据。

当插入或更新一个RAW列字段时,如果输入字符串的字节长度超过RAW列宽度的2倍,系统报错。

示例(HEAP表)

CREATE TABLE IF NOT EXISTS raw_table(c1 RAW(10));


INSERT INTO raw_table VALUES('1234ABCDEF');
INSERT INTO raw_table VALUES('1AB');


INSERT INTO raw_table VALUES('G');
YAS-00223 invalid hex number


INSERT INTO RAW_TABLE VALUES(LPAD(1,21,1));
YAS-04008 C1 size exceeding limit 10

2.RAW类型向字符型隐式转换:

系统将RAW类型数据作为以二进制输入的十六进制表述,转换为字符,其中每个字符是一个十六进制数字(0-9、a-F、a-F),表示四个连续的原始数据位。例如,将位为10101011的原始数据的一个字节做为十六进制值AB,并转换为字符串’AB’。

示例(HEAP表)


SELECT GROUP_CONCAT(c1) FROM raw_table;
GROUP_CONCAT(C1)                                                 

1234ABCDEF,01AB 

3.RAW类型向BLOB类型隐式转换:

因为RAW类型和BLOB类型都可用于存储二进制对象,所以系统可以将RAW数据直接转换为BLOB数据。

示例(HEAP表)


CREATE TABLE IF NOT EXISTS blob_table(c1 BLOB);


INSERT INTO blob_table SELECT c1 FROM raw_table;

4.BLOB类型向RAW类型隐式转换:

在BLOB数据字节长度不超过32000字节的情况下,BLOB数据可以被转换成RAW数据。

示例(HEAP表)


INSERT INTO raw_table SELECT c1 FROM blob_table;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值