字符数字类型:
- char、varchar、long varchar
- nchar、nvarchar、long nvarchar
- 通过域实现兼容sqlserver的数据类型:sysname(varchar(30))、text(long varchar域)、ntext(long nvarchar域)、xml(long varchar域)、uniqueidentifierstr(char(36)的域:映射为sqlserver的uniqueidentifier列)
sybase和sqlserver不同,所有字符数据类型的存储结构是相同的。默认情况下:在一段中存储不超过128个字节的值;如果超过128个字节的值的完整值保存在其他页面上,本地仅仅保存4个字节的指向完整值的地址。默认值由create table语句的inline和prefix字句控制。
sybase和sqlserver不同,字符数据类型的长度区分字节长度和字符长度,默认为字节长度。
sybase和sqlserver不同,char类型在行为上是和varchar相同的。sql anywhere不会用空白字符填充数据
当客户端程序对字符数据类型的列执行describe时,视所用的程序接口不同,使用字符长度语义定义可能会影响返回的值。
数字数据类型:
- bigint、bit、decimal、int、integer、numeric、smallint、tinyint
- double、float(p)、real
- 通过域实现兼容sqlserver的数据类型:money(numeric(19,4))、smallmoney(numeric(10,4))
必须注意:精度、小数位数、数字个数问题
sybase默认bit类型不允许为空,而sqlserver则无此限制
sybase规定除了bit以外的整数类型可以有unsigned修饰,而sqlserver则无此修饰
位数组数据类型:只能存储0和1组成的数据:整数的二进制表示
- varbit、bit varying、long varbit、long bit varying
二进制数据类型:逐字节比较、不进行字符集转换
binary、long binary、varbinary、binary varying、uniqueidentifier(又称uuid或guid)
通过域实现兼容sqlserver的数据类型:image(long binary)
sybase的二进制数据和sqlserver的二进制数据类型最大长度大小不同:为32767而不是80000
sybase的binary虽然类型和varbinary不同,但sybase总是那它当做varbinary处理
日期和时间类型:
- date、time、timestamp
- 通过域实现兼容sqlserver的数据类型:datetime(timestamp)、smalldatetime(timestamp)
sybase的日期和时间类型和sqlserver的有很大不同,sqlserver有datetime、smalldatetime两种类型且 能表示的范围和精度较小。
sqlserver中的timestamp类型为一表示行版本的二进制串,和sybase的timestamp日期时间类型根本不同
sybase中,无论:接口如何,是否是odbc格式,是否是嵌入sql的格式,是否指定了date_order,“yyyy-mm-dd”、“yyyy/mm/dd”格式总是可以正确解析为日期;“hh:mm:ss:ssss”将明确的解释为时间;二者的组合总能产生明确的日期时间;“yyyy-mm-dd hh.mm.ss.sss”也可以产生明确的日期时间,时间中的句点号仅仅能用在和日期组合的情况下!!
域:用户自定义数据类型:内置数据类型的别名,包括:精度、小数位数、default值、check约束、为null性。
域的存在,有利于整个数据库的一致性,并可以消除一些类型错误
sybase的域的定义和使用及功能及要求和sqlserver的完全一样
数据类型转换:
- cast、convert显示转换;类型函数如date、string、数字类型+0.0;隐式转换
- 字符集转换的丢失和字符替换问题
- java数据类型和sql数据类型依照 jdbc标准执行转换
- 不同数据类型的转换需要认真研读、实践,sybase和sqlserver以及不同的rdbms系统均不会完全相同