2016-12-02 1 views
0

Я хочу создать таблицу в SQL, которая имеет строку attr для пользователей веб-сайта. Как объявить это attr, поскольку имена не имеют максимальной длины? Могу ли я просто оставить пустую длину и сделать это так?NVARCHAR с переменной длиной?

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

Кроме того, я должен сказать, NOT NULL для первичных ключей, или не являются первичными ключами уже никогда нуля?

Заранее спасибо :)

+0

Whch dbms Вы используете? Согласно ANSI SQL 'NVARCHAR' без длины заданных значений длина 1. – jarlh

+0

Столбцы первичного ключа неявно НЕ НУЛЛ. – 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 Lite, то documentation говорит

Каков максимальный размер VARCHAR в SQLite?

SQLite не применяет длину VARCHAR. Вы можете объявить VARCHAR (10), и SQLite будет рад предоставить вам 500 символов в . И он сохранит все 500 символов неповрежденными - он никогда не усекает.

+0

Спасибо :) #charLimit – Tirafesi

+0

О, кстати, это NVARCHAR или NVARCHAR2? В чем разница между ними? – Tirafesi

+0

, какую базу данных вы используете –

1

Как я должен заявить об этом Attr, поскольку имена не имеют максимальную длину? Могу ли я просто оставить пустую длину и сделать это так?

Да, в SQLite, можно просто объявить столбец с любым именем «текст affinity» типа (CHAR, TEXT, CLOB и т.д.), и он будет хранить строки (или сгустки) без ограничения длины (за исключением глобальный предел длины строки, который по умолчанию равен 1 ГБ).

Если вы хотите ограничить длину строк, вы можете сделать это с явным ограничением CHECK, например CHECK(LENGTH(name) <= 100).

Кроме того, мне нужно указать NOT NULL для ПЕРВИЧНЫХ КЛЮЧЕЙ или являются первичными ключами уже никогда не 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 позволяет использовать значения NULL в столбце PRIMARY KEY. SQLite может быть исправлен, чтобы соответствовать стандарту, но при этом может нарушить устаревшие приложения . Следовательно, было решено просто зафиксировать факт , что SQLite позволяет NULL s в большинстве столбцов PRIMARY KEY.

Смежные вопросы