Какими могут/не могут быть имена столбцов в SQLite?
Вопрос: Существуют ли какие-либо правила для имен столбцов в SQLite?
Я столкнулся с необходимостью определить допустимые символы для имен столбцов в SQLite и хотел бы уточнить несколько моментов:
- Можно ли использовать символы, такие как '/' в именах столбцов?
- Допустимы ли в именах столбцов символы UTF-8?
Заранее благодарю за помощь!
4 ответ(ов)
Да, в SQLite можно использовать символы, такие как '/', в названиях столбцов, если заключить их в двойные кавычки. Вот несколько примеров работы с этой возможностью на SQLite 3.5.9 под управлением Linux:
> CREATE TABLE test_forward ( /test_column INTEGER );
SQL error: near "/": syntax error
> CREATE TABLE test_forward ("/test_column" INTEGER );
> INSERT INTO test_forward("/test_column") VALUES (1);
> SELECT test_forward."/test_column" from test_forward;
1
Однако стоит отметить, что лучше этого не делать. Использование нестандартных символов в именах столбцов может привести к путанице и усложнить чтение и поддержку вашего кода.
В SQLite, если нужно использовать "неправильные" имена идентификаторов (например, содержащие пробелы или специальные символы), вы можете заключать их в двойные кавычки, как в примере с "identifier#1"
. Однако также можно использовать квадратные скобки: например, [identifier#2]
будет работать так же.
Вот пример:
sqlite> create table a0.tt ([id#1] integer primary key, [id#2] text) without rowid;
sqlite> insert into tt values (1,'test for [x] id''s');
sqlite> select * from tt;
id#1|id#2
1|test for [x] id's
Таким образом, вы можете выбрать любой из двух способов для работы с идентификаторами, которые включают специальные символы или пробелы.
Это не полный ответ, но может помочь. Вот ключевые слова из документации SQLite, представленные в виде массива:
["ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ALWAYS", "ANALYZE", "AND", "AS",
"ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY", "CASCADE", "CASE", "CAST",
"CHECK", "COLLATE", "COLUMN", "COMMIT", "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT", "CURRENT_DATE",
"CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE", "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT",
"DO", "DROP", "EACH", "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUDE", "EXCLUSIVE", "EXISTS",
"EXPLAIN", "FAIL", "FILTER", "FIRST", "FOLLOWING", "FOR", "FOREIGN", "FROM", "FULL", "GENERATED",
"GLOB", "GROUP", "GROUPS", "HAVING", "IF", "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED",
"INITIALLY", "INNER", "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY",
"LAST", "LEFT", "LIKE", "LIMIT", "MATCH", "MATERIALIZED", "NATURAL", "NO", "NOT", "NOTHING",
"NOTNULL", "NULL", "NULLS", "OF", "OFFSET", "ON", "OR", "ORDER", "OTHERS", "OUTER",
"OVER", "PARTITION", "PLAN", "PRAGMA", "PRECEDING", "PRIMARY", "QUERY", "RAISE", "RANGE", "RECURSIVE",
"REFERENCES", "REGEXP", "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RETURNING", "RIGHT", "ROLLBACK",
"ROW", "ROWS", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP", "TEMPORARY", "THEN", "TIES",
"TO", "TRANSACTION", "TRIGGER", "UNBOUNDED", "UNION", "UNIQUE", "UPDATE", "USING", "VACUUM", "VALUES",
"VIEW", "VIRTUAL", "WHEN", "WHERE", "WINDOW", "WITH", "WITHOUT"]
Надеюсь, это поможет вам в работе с SQLite!
Названия полей должны соответствовать тем же правилам, что и названия таблиц. Я проверял это с помощью SQLite Administrator.
- Допускаются только алфавитно-цифровые символы и знак подчеркивания.
- Название поля должно начинаться с буквы или знака подчеркивания.
Если придерживаться этих правил, то вам не придется использовать экранирование, и это может помочь избежать проблем в будущем.
Как вывести список таблиц в файле базы данных SQLite, открытом с помощью ATTACH?
Как вставить несколько строк в SQLite?
Что значит 'synchronized'?
Получить строки с максимальным значением в одном столбце для каждого уникального значения другого столбца
Как восстановить дамп-файл из mysqldump?