`
liss
  • 浏览: 844241 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

informix的字符串类型详解(含与oracle的对比)

阅读更多

lvarchar在9.4版本之后才可以用带指定长度的方式,如lvarchar(3000),不带长度则默认是2048字节,最大长度是32,739字节。所以对于9.4之前的版本,不能用带长度的表达式,数据库会报语法错误。


另,据说informix没有补丁的说法,实际就是升级到高版本,不知道这样的说法是否正确。

 

在informix中有如下几种对字符串操作的类型:char,varchar,nchar,nvarchar,lvarchar,text

char,varchar,nchar,nvarchar类型的作用同Oracle一样,不同的只在于长度,关于他们的详细解释,参见我的上一篇文章--oracle的字符串类型详解:http://hi.baidu.com/bjn_wuming/blog/item/ee3463ef2666eee3ce1b3eb6.html

以下为使用winSQL测试的结果:
1、char的最大长度网上普遍说是254,而经过测试后发现却是32767,图"informix中char长度测试1"是在32767长度下建表的正确返回,而"informix中char长度测试2"则是使用32768长度下建表出现了错误提示。

ps:请不用质疑我的测试结果,如果你发现你的informix中的char是254的话,有可能是你的新版本对此做了修正。

informix中char长度测试1,char(32767)运行正常


informix中char长度测试2,char(32768)报错


2、varchar的最大长度为255(在oracle中的长度为4000)。图"informix中varchar长度测试1"和"informix中varchar长度测试2"为的测试结果。


informix中varchar长度测试1,varchar(255)执行正常


informix中varchar长度测试2,varchar(256)执行报错


3、nchar与char相同,最大长度32767,多数情况下1个字符占2字节。


4、nvarchar的最大字符数是255个字符,但是由于它也是在多数情况下1个字符占2字节,所以它的最大长度应该是255*2,也就是510字节。


5、lvarchar比较特殊,通常用于存放比较长但又不会特别长的字符串,其最大长度是32739字节(看好不是32767),如果缺省长度则默认是2048,测试结果见下图,虽然经过上面的测试发现它还不如char和nchar高,但我个人在这一点上更相信网上的普遍说法。char之所以能被测出达到32767那么长的字符,很可能与winsql或者是版本bug有关,并且char和nchar是定长类型。lvarchar是可变长类型,所以在需要定下较长的字段时,无论从稳定性和空间的优化上都应该选择lvarchar

informix中lvarchar长度测试1,lvarchar(32739)执行正常



informix中lvarchar长度测试2,lvarchar(32740)执行报错


6、text与oracle中的long类型一样,用来应对超长字符串的类型,最大长度为2GB,貌似唯一的不同就是long是被oracle官方声明不推荐的类型,而text是informix中常用的处理大字段的类型

以下是特别说明:
1、在定义长度时,括号中的是字符数,而不是字节数,这一点与oracle相同(比如nvarchar中一个字符占2个字节,所以将nvarchar(255)的字段的一个数据填满的话,实际会占510字节的存储空间+1个字节的预留空间)


2、在informix的一个表中对以上字符串类型定义的总长度不能超过32767(不包括对大字段处理的text类型),而且遇到varchar与nvarchar则总长度会再减1,而遇到lvarchar则需要减3,这是因为可变长度的字段需要对其预留一些空间用于可变操作(varchar和nvarchar是1字节,lvarchar是3个字节,不同的原因,我个人推测是由于支持的字符集问题,lvarchar为了支持一些占3个字节的字符集,所以它会留出3个字节的预留空间)。


      如下图"特别声明1":建立了一个表叫typetest,其中的2个字段varchar与char的长度为255和32512,因为两个长度相加虽然为32767,但是varchar类型要预留1个字节的可变空间,所以其时间占用长度应该为255+1,所以实际长度是32768,超过了32767的长度限制,所以被报错了。


特别声明1

3、如上面所说varchar的实际长度是定义的上限长度再+1,相对的nvarchar也是会加1的,而char和nchar不会。


4、如图"特别声明2",lvarchar的实际长度为设定的上限长度+3,所以图中2个字段的实际长度为255+32510+3=32768,超过了32767的上限,因而会被报错


特别声明2


5、lvarchar在9.2版本以后才能使用,而在9.4版本以后才可以使用指定长度的方式。

分享到:
评论

相关推荐

    数据库连接字符串

    oracle连接字符串: class:oracle.jdbc.driver.OracleDriver url:"jdbc:oracle:thin:@localhost:1521:jbitdb","epet","epet" sqlserver: class:com.microsoft.sqlserver.jdbc.SQLServerDriver url:"jdbc:sql...

    JDBC连接各种数据库字符串大全

    ### JDBC连接各种数据库字符串大全详解 #### 一、Oracle数据库(Thin模式) 在Java中使用JDBC连接Oracle数据库时,通常采用的是thin模式。这种方式直接通过JDBC驱动与Oracle数据库进行交互,不需要额外的中间层...

    多数据库的字段类型详解

    下面将详细讲解SQL SERVER、Oracle、DB2、Sybase以及Informix这五个常见数据库系统的字段类型。 1. SQL SERVER: SQL SERVER是一款由微软公司开发的关系型数据库管理系统,它提供了丰富的数据类型。例如: - INT...

    java连接数据库字符串

    ### Java连接数据库字符串详解 #### 一、JDBC概述与加载驱动 在Java开发中,JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类...

    Ado的连接字符串大全

    本篇文章详细介绍了不同数据库环境下ADO连接字符串的具体配置方法,涵盖了SQL Server、ACCESS、Oracle、MySQL、Interbase、IBM DB2、Sybase、Informix、Ingres等多种数据库系统,以及Excel、Text文件、Visual FoxPro...

    INFORMIX连接工具

    - 示例连接字符串:`jdbc:informix-sqli://IP:port/dbname:INFORMIXSERVER=Servername;newlocale=zh_cn,zh_cn;newcodeset=gbk,8859-1,819` - `IP:port`:INFORMIX服务器的IP地址和端口号。 - `dbname`:要连接的...

    JDBC连接数据库各种数据库参数大全

    ### JDBC连接数据库各种数据库参数详解 #### 一、Oracle8/8i/9i数据库(thin模式) 在Java中通过JDBC访问Oracle数据库时,通常采用thin驱动方式。thin驱动是一种纯Java驱动,无需依赖任何非Java代码即可完成与...

    Oracle ProC 编程入门

    - **注意事项**:需要特别注意字符串的转义问题。 - **不同之处**:与 Oracle 方法相比,ANSI 方法提供了更多的标准性和兼容性。 - **处理步骤**:与 Oracle 方法类似,但具体的语法和关键字略有不同。 #### 七...

    映射SQLJAA类型.doc

    #### 五、JDBC类型详解 下面详细介绍几种常见的JDBC类型及其与SQL类型和Java类型的对应关系: 1. **CHAR** - **定义**:固定长度的小字符串。 - **对应SQL类型**:SQL-92标准中的CHAR类型。 - **Java类型**:...

    SQLmap使用指令详解

    - **参数类型识别**:每个动态参数都会被测试为数字、单引号字符串、双引号字符串或带括号的字符串,以确定有效的注入语法。 - **特定参数测试**:用户可以选择仅对特定参数进行测试,例如GET、POST或Cookie参数。 ...

    oracle 高手笔记

    - 字符串连接:使用 `||` 运算符连接字符串。 ```sql SELECT first_name || ' ' || last_name AS full_name FROM s_emp; ``` - **使用别名:** - 为列命名别名可以增强查询结果的可读性。 ```sql SELECT ...

    数据库连接driverClass和jdbcUrl大全

    在Java应用程序中,与各种类型的数据库进行交互时,需要使用到特定的驱动程序以及正确的连接字符串。本文将详细介绍不同数据库的`driverClass`与`jdbcUrl`,帮助开发者更好地理解并配置数据库连接。 #### 一、MySQL...

    综合开发中所应用的helpAPI

    - **连接字符串**:`jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;user=testuser;password=testpassword`。 - **用户名与密码**:直接在URL中指定。 - **代码示例**: ```java Class.for...

    第十节 Sqlmap注入参数1-01

    在检索结果时,Sqlmap 使用一种机制,在这种机制中,所有条目都被转换为字符串类型,并在NULL值的情况下用空格字符替换。这样做是为了防止出现任何错误状态(例如,将空值与字符串值连接起来),并简化数据检索过程...

    java web数据库连接池代码

    Java Web数据库连接池代码详解 Java Web开发中,数据库连接池是非常重要的一部分。连接池可以减少数据库连接的频率,...在实际开发中,我们需要根据具体的数据库类型和连接方式来选择合适的JDBC驱动程序和连接字符串。

    JDBC连接各种数据库的代码

    - **连接字符串**: ```java String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 为数据库实例名 String user = "test"; String password = "test"; Connection conn = DriverManager.get...

    jdbc连接数据库

    - **连接字符串**:`jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;user=testuser;password=testpassword` - `123.45.67.89`:服务器地址 - `1533`:监听端口 - `myDB`:数据库名 - `my...

    JDBC数据库链接,连接各种数据库方式速查表

    - **连接字符串:** `jdbc:informix-sqli://[host]:[port]/[database_name]:INFORMIXSERVER=[server_name]` - `[host]`:数据库服务器地址。 - `[port]`:数据库监听端口,默认为1533。 - `[database_name]`:...

    Java连接各种数据库的实例

    本篇文章将详细介绍如何使用Java连接并操作多种类型的数据库,包括Oracle、DB2、SQL Server、Sybase、Informix、MySQL以及PostgreSQL。 #### 二、基础知识介绍 在深入讲解之前,我们需要了解一些关于Java数据库...

Global site tag (gtag.js) - Google Analytics