2013-01-07 105 views
-3

不同SQL SQL RDBMS實現的VARCHAR和VARCHAR2的大小限制是不同的,還是相同?感謝幫助。不同數據庫的Varchar和Varchar2的最大大小/長度

+1

AFAIK'varchar2'是Oracle特有的,所以我不確定問題是什麼。 'varchar'的大小限制取決於數據庫。 –

+0

你是出於好奇還是有理由問這個問題? – 2013-01-07 05:54:41

+1

我要求知道,天氣VARCHAR或VARCHAR2在不同數據庫中有不同的大小限制,或者所有數據庫的大小限制是相同的? – user1716079

回答

2

首先在MySQL中使用varchar,在Oracle中使用varchar2。 此外,varchar和varchar2的大小和限制因數據庫而異。從

參考:http://docs.oracle.com/cd/E12151_01/doc.150/e12155/oracle_mysql_compared.htm

MySQL和Oracle都在 他們支持的字符類型和它們存儲的方式有些差異和檢索字符類型 值。

MySQL支持字符類型的CHAR和VARCHAR類型,其長度小於65,535字節,長度爲 。 CHAR類型可以有一個 的最大長度爲255個字節,並且從MySQL 3.23開始,它也可以是 ,其長度爲0字節。在MySQL 5.0.3之前,VARCHAR類型的長度 規範與CHAR類型相同。從 MySQL 5.0.3開始,VARCHAR類型的最大長度爲65,535 字節。 Oracle支持四種字符類型:CHAR,NCHAR,NVARCHAR2 和VARCHAR2。所有Oracle 字符類型可聲明的最小長度爲1個字節。 CHAR和NCHAR 允許的最大大小爲2,000個字節,NVARCHAR2和VARCHAR2的最大大小爲4,000個字節。

MySQL CHAR值在存儲時填充空格至指定長度 ,並且當檢索值 時刪除尾隨空格。另一方面,VARCHAR值的存儲方式如下: 許多字符,但在MySQL 5.0.3尾隨空格 在存儲和檢索值時被刪除。 Oracle 如果值小於列長度,則將其CHAR和NCHAR類型的值填充爲列長度 ,並且在檢索時不會刪除尾部空格 。對於NVARCHAR2和VARVHAR2數據類型 列,Oracle存儲和檢索包含尾隨空格的值,其值完全如 所示。

如果將值指定給超出其指定長度的字符類型列,則MySQL會截斷該值並且不會生成 錯誤,除非設置了STRICT SQL模式。如果 指定給字符類型列的值超過其指定的 長度,Oracle會生成錯誤。

在MySQL中,每個字符類型(CHAR,VARCHAR和TEXT)列都有一個 列字符集和歸類。如果字符集或排序規則 未在列定義中明確定義,則表 字符集或排序規則在指定時是隱含的;否則,選擇 數據庫字符或排序規則。在Oracle中,爲CHAR和VARCHAR2類型設置的字符 是由數據庫字符 設置的,而用於NCHAR和NVARCHAR類型的字符集定義爲 的國家字符集。

在MySQL中聲明CHAR或VARCHAR類型時,默認長度 語義是MySQL 4.1和更高版本的字符而不是字節。在 Oracle中,默認長度語義是NCHAR和NVARCHAR2類型的CHAR和VARCHAR2 類型和字符的字節。

SQL Developer將分別將MySQL CHAR和VARCHAR類型映射到Oracle CHAR和 VARCHAR2類型。 SQL Developer將從相應MySQL CHAR和VARCHAR數據類型列所需的最大長度爲 的字節數中確定Oracle CHAR和VARCHAR2數據類型列 的最大字節數 。如果 MySQL VARCHAR2列的數據超過4000字節,則 將該列轉換爲Oracle CLOB數據類型列。

+0

但是不同的操作系統,相同的數據庫它將會是相同的,還是會有所不同? – user1716079

+0

@ user1716079 - 這不是你的問題要求.... – 2013-01-07 07:05:49

+0

從上面提到的我得知,VARCHAR和VARCHAR2可能因數據庫而異,但我的進一步問題是如果數據庫是相同的,但我們正在使用不同的OS。比如說..窗口中的Oracle和Linux中的Oracle。它會壓縮VARCHAR和VARCHAR2的大小限制嗎? – user1716079