Dbvisualizer9.1对db2的char字段存16进制数据处理异常

最近碰到一个db2字段数值问题的bug,差了半天,发现原来是dbvisualer的字段显示问题,特此记录此异常。

测试过程:

1、建表,简单的测试表:

CREATE TABLE

USR.A_TEST

(

ID INTEGER NOT NULL,

NAME CHARACTER(4) NOT NULL

);

2、插入数据,插入一个16进制字段:

insert into USR.A_TEST (id, name) values (3, x‘ffffff20‘)

3、查看数据,sql查询正常:

select hex(name) from usr.a_test where id =3

4、使用dbvisualizer的编辑器查看数据:

从ff变为了3f了。。。

看起来,还是命令行的最靠谱。



续,对声明了 for bit data的表,就没有问题了:

1、建表:

CREATE TABLE

usr.A_TEST

(

ID INTEGER NOT NULL,

NAME CHARACTER(4) for bit data NOT NULL

);

2、插入数据:

insert into USR.A_TEST (id, name) values (3, x‘ffffff20‘)

3、查看数据:

select hex(name) from usr.a_test where id =3

4、使用dbvisualizer的编辑器查看数据:

时间: 2024-07-30 01:01:19

Dbvisualizer9.1对db2的char字段存16进制数据处理异常的相关文章

关于将16进制的数据存放在char数组中的问题的解决方案

首先说明一点,题目提到的问题我目前并没有解决,我在此处发表随笔就是希望看到的同学们有会的帮我解决一下. 现在来说一下我的需求: 1.定义一个数组:unsigned char cmd[6] = {0xF0,0x11,0x01,0x65,0x87,0xA9}; 2.然后将这个数组的数据写入串口中,我在写的时候发现了cmd中的数据出现了乱码的现象,于是我采用下面一种方法: 3.使用sprintf函数,于是有了下面的代码: 1 char pBuf[9]; 2 sprintf(pBuf,"%x %x %x

MFC中如何将16进制字符转化成10进制,包括CString与char*的转换

1 CString m_str; 2 m_str="1F"; //16进制字符为1F 3 m_str = "0x"+m_str; 4 char *p= (char*)((LPCTSTR)m_str); //将CString的字符m_str转化成char*型,并赋值给指针p 5 char *str; 6 int m_Speed = (int)strtol(p, &str, 16); //十六进制转化成10进制,并赋值给整形数据m_Speed

给char赋16进制

十六进制: char c = '\x22'; \x是十六进制转义字符的标志 char a[3] = {(char)0x32,(char)0x55,(char)(0xff)}; char *a="\x01\x66\xff"; 原文地址:https://www.cnblogs.com/mydriverc/p/12331744.html

db2的char类型末尾都会以空格填充

查询姓"刘"且全名为2个汉字的学生的姓名: SELECT Sname FROM Student WHERE Sname LIKE '刘__'; 为什么没有结果呀?我把两下横线改为%后有结果出来,难道在DB2里面下横线不代表任意单个字符吗? 经过试验发现 db2的通配符"_" 只能匹配一个字节.db2情况下: char类型, db2的char类型末尾都会以空格填充的. 如果你的sname定义为char(8), 那么'刘xx'在数据库里面实际上保存的是'刘xx    

自定义char字段与查询优化与事务

自定义char字段 class MyCharField(models.Field): def __init__(self,max_length,*args,**kwargs): self.max_length = max_length super().__init__(max_length=max_length,*args,**kwargs) def db_type(self, connection): return 'char(%s)'%self.max_length 如果你使用的是djang

【详解】C语言:编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数。保存到s中。

#include<stdio.h> void itob(int n,char s[], int b) {  int i=1;  for(;i<=32;i++)    //共循环了32次,保证得到32位的二进制数  {   s[i-1]= n % b;   //数组是从编号0开始的,一直到编号31结束   n = n/b ; //用模除的方法依次得到每位进制数  }  for(i=32;i>0;i--)  {   printf("%d",s[i-1]);   }

关于log4net自定义字段写入不进数据库的问题

网上的教程上配置文件基本上都差不多 <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <configSections> <section name="log4net" type="log4net.Config.Lo

编写一个函数itob(int num,char s[], int n),将整数num转换为以n进制的数。保存到s中。

在本题中,二进制.八进制及十进制算法思路一样,采取模除的方式,输出各个位置的数,接着采用逆序输出.在十六进制中"0123456789abcdef"[num%16],求出各位的数字. #include<stdio.h> void reverse(int len,char arr[]) //逆置 {  int left =0;  int right =len -1;  while(left < right)  {   char temp = arr[left];     

进制数相加 char* sum(int n,char* num1,char* num2)

功能: 第一个参数n 代表多少进制,最大就是36进制,从0到9,然后a到z代表10到35. char* num1 和char* num2 分别接受两个数字字符串,然后相加得到的结果返回 #include<iostream> using namespace std; //n 表示进制数 //a 表示操作数1 //b 表示操作数2 //jy 表示进位数 //jy1 是否进位 char sum1(int n,char a,char b,int jy,int* jy1) { int num1=0; i