【Teradata】TD Unicode编码格式下varchar定义测试

如下测试表,每个字段字符编码格式均为Unicode。

1.varchar(1)可以存储1个汉字,也只能存储1个ASCII字符。

--创建表nc_test,每个字段编码格式均设定为Unicode【使用SQLA工具,session字符集设定为UTF8或UTF16】
CREATE
MULTISET TABLENC_TEST , NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO, MAP = TD_MAP1 ( EWID VARCHAR(1) CHARACTER SET UNICODE CASESPECIFIC, NAME VARCHAR(1) CHARACTER SET UNICODE CASESPECIFIC, DWDESC VARCHAR(2) CHARACTER SET UNICODE CASESPECIFIC ) NO PRIMARY INDEX ;
--插入数据【使用SQLA工具,session字符集设定为UTF8或UTF16】
insert
into NC_TEST values('A','','中国'); insert into NC_TEST values('A','中国','中国'); insert into NC_TEST values('A','中国人','中国'); insert into NC_TEST values('AA','中国人','中国');
--查询结果【使用SQLA工具,session字符集设定为UTF8或UTF16】
select * from NC_TEST;

EWID   NAME     DWDESC
--------------------------------------------------
A     中    中国
A     中    中国
A     中    中国
A     中    中国

特别说明:上述SQLA工具,如果session使用字符集为ASCII,则定义为VARCHAR(60) CHARACTER SET UNICODE的字段,最终只能存入30个汉字(工具设定为UTF8或UTF16时可存入60个汉字)。

建表的时候使用ASCII会导致表名和字段名中文Title乱码,实际插入数据时改为使用UTF8或UTF16数据仍然正常。

CREATE MULTISET TABLE NC_TEST ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO,
     MAP = TD_MAP1
     (
      SQLA_CHARACTER varchar(20)  CHARACTER SET UNICODE CASESPECIFIC,
      EWID   VARCHAR(60)   CHARACTER SET UNICODE CASESPECIFIC
    
      ) 
NO PRIMARY INDEX ;

--SQLA连接session字符集选择ASCII,显示结果为:
--如果为非保证金一户通模式,也区分两种模式,对于银行承兑汇票业
insert into nc_test values ( 'ASCII','如果为非保证金一户通模式,也区分两种模式,对于银行承兑汇票业务,在核心系统也保存了每一张银票对应过的保证金担保金额,根据核心的数据,将对应保证金担保金额作为可缓释余额敞口金额进行缓释扣减。' ); --SQLA连接session字符集选择UTF8或者UTF16,显示结果为:
--如果为非保证金一户通模式,也区分两种模式,对于银行承兑汇票业务,在核心系统也保存了每一张银票对应过的保证金担保金额,根据
insert into nc_test values ( 'UTF-16','如果为非保证金一户通模式,也区分两种模式,对于银行承兑汇票业务,在核心系统也保存了每一张银票对应过的保证金担保金额,根据核心的数据,将对应保证金担保金额作为可缓释余额敞口金额进行缓释扣减。' );

 2.show table,字段长度与定义一致

show TABLE NC_TEST

CREATE MULTISET TABLE NC_TEST ,
     NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO,
     MAP = TD_MAP1
(
      EWID VARCHAR(1) CHARACTER SET UNICODE CASESPECIFIC,
      NAME VARCHAR(1) CHARACTER SET UNICODE CASESPECIFIC,
      DWDESC VARCHAR(2) CHARACTER SET UNICODE CASESPECIFIC
) NO PRIMARY INDEX ;

3. dbc.columnsv字典表中字段长度为定义的2倍

select tablename,columnname,columnlength from dbc.columnsv
where   trim(tablename) ='NC_TEST'
 
tablename   columnname   columnlength
--------------------------------------------------
 NC_TEST          NAME      2
 NC_TEST          EWID      2
 NC_TEST          DWDESC    4

 

转载于:https://www.cnblogs.com/badboy200800/p/10785699.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值