informix的字串型別詳解

2021-06-18 18:19:03 字數 2688 閱讀 9437

lvarchar在9.4版本之後才可以用帶指定長度的方式,如lvarchar(3000),不帶長度則預設是2048位元組,最大長度是32,739位元組。所以對於9.4之前的版本,不能用帶長度的表示式,資料庫會報語法錯誤。

另,據說informix沒有補丁的說法,實際就是公升級到高版本,不知道這樣的說法是否正確。

在informix中有如下幾種對字串操作的型別:char,varchar,nchar,nvarchar,lvarchar,text

以下為使用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版本以後才可以使用指定長度的方式。

mysql字串型別 mysql 字串型別

字串型別 字串型別指char varchar binary varbinary blob text enum和set。該節描述了這些型別如何工作以及如何在查詢中使用這些型別。型別大小用途 char0 255位元組定長字串 varchar0 65535 位元組變長字串 tinyblob0 255位元組...

字串型別

c 定義了乙個內容豐富的抽象資料型別庫,其中,string和vector是兩種最重要的標準庫型別,前者支援可變長字串,後者則表示可變長的集合。還有一種標準庫型別是迭代器,它是string和vector的配套型別,常被用於訪問string中的字元或vector中的元素。本篇將介紹string型別。標註...

字串型別

redis字串型別鍵的查詢 1.get 查詢key的值 2.mget 查詢所有key的值 3.getrange 查詢乙個字串的子串,子串的內容取決於start和end.4.strlen 返回key的字串長度 5.getset 原子地給乙個key設定value並且將舊值返回 redis字串型別鍵的計數...