2016-12-02 59 views
0

我想創建一個SQL表,它有一個網站用戶的字符串attr。我應該如何聲明這個屬性,因爲名稱沒有最大長度?我可以把這個長度留空嗎?可變長度的NVARCHAR?

CREATE TABLE User(
id NUMBER PRIMARY KEY NOT NULL 
name NVARCHAR 
) 

而且,我需要說NOT NULL的主鍵,或者主鍵已經不能爲null?

感謝提前:)

+0

你正在使用哪個dbms?根據ANSI SQL「NVARCHAR」,不指定長度意味着長度爲1. – jarlh

+0

主鍵列隱含爲NOT NULL。 – jarlh

+0

@jarlh我只是試圖插入一個條目到ID爲NULL的表,它的工作。但是,如果我把NOT NULL它正確提供了警告。即使對於主鍵,SQLite是否要求我使用NOT NULL? – Tirafesi

回答

1

你應該申報長度MAX和主鍵是自動NOT NULL

CREATE TABLE User(
id NUMBER PRIMARY KEY 
name NVARCHAR(MAX) 
) 

既然你以後指定的DBMS爲SQL精簡版,該documentation

SQLite中VARCHAR的最大大小是多少?

SQLite不強制執行VARCHAR的長度。你可以聲明一個 VARCHAR(10),SQLite會很樂意讓你在 中放500個字符。它將保持所有500個字符的完整 - 它從不截斷。

+0

謝謝:) #charLimit – Tirafesi

+0

哦,順便說一下,它是NVARCHAR還是NVARCHAR2?他們之間有什麼區別? – Tirafesi

+0

你使用哪個數據庫 –

1

我應該如何申報此ATTR,因爲名稱不具有最大長度是多少? 我可以將這個長度留空嗎?

是,SQLite中你可以與任何「文本affinity」類型名稱(CHARTEXTCLOB等)聲明列,它將存儲不限制長度的字符串(或斑點)(除全局字符串長度限制,默認爲1 GB)。

如果您確實想約束字符串的長度,可以使用明確的CHECK約束來完成,如CHECK(LENGTH(name) <= 100)

另外,我是否需要說NOT NULL爲主鍵,或主鍵 已經永遠不會空?

根據SQL標準,PRIMARY KEY意味着NOT NULL。但是,SQLite具有a long-standing bug,這使得需要明確的NOT NULL約束。

根據SQL標準,PRIMARY KEY應始終暗示NOT NULL。不幸的是,由於一些早期版本中的錯誤,這不是SQLite中的情況。除非列是INTEGER PRIMARY KEY或 表是WITHOUT ROWID表或該列被聲明爲NOT NULL, SQLite允許在PRIMARY KEY列中輸入NULL值。 SQLite可以修復爲符合標準的 ,但這樣做可能會破壞傳統的 應用程序。因此,已決定僅記錄事實 SQLite允許在大多數PRIMARY KEY列中使用NULL