What are valid table names in SQLite?

SqlSqlite

Sql Problem Overview


What are the combination of characters for a table name in SQLite to be valid? Are all combinations of alphanumerics (A-Z, a-z and 0-9) constitute a valid name?

Ex. CREATE TABLE 123abc(...);

What about a combination of alphanumerics with dashes "-" and periods ".", is that valid as well?

Ex. CREATE TABLE 123abc.txt(...);
Ex. CREATE TABLE 123abc-ABC.txt(...);

Thank you.

Sql Solutions


Solution 1 - Sql

I haven't found a reference for it, but table names that are valid without using brackets around them should be any alphanumeric combination that doesn't start with a digit:

abc123 - valid
123abc - not valid
abc_123 - valid
_123abc - valid
abc-abc - not valid (looks like an expression)
abc.abc - not valid (looks like a database.table notation)

With brackets you should be able to use pretty much anything as a table name:

[This should-be a_valid.table+name!?]

Solution 2 - Sql

All of these are allowed, but you may have to quote them in "".

sqlite> CREATE TABLE "123abc"(col);
sqlite> CREATE TABLE "123abc.txt"(col);
sqlite> CREATE TABLE "123abc-ABC.txt"(col);
sqlite> select tbl_name from sqlite_master;
123abc
123abc.txt
123abc-ABC.txt

In general, though, you should stick to the alphabet.

Solution 3 - Sql

From SQLite documentation on CREATE TABLE, the only names forbidden are those that begin with sqlite_ :

> Table names that begin with "sqlite_" are reserved for internal use. It is an error to attempt to create a table with a name that starts with "sqlite_".

Solution 4 - Sql

Per Clemens on the sqlite-users mailing list:

Everything is allowed, except names beginning with "sqlite_".

CREATE TABLE "TABLE"("#!@""'☺\", "");

You can use keywords ("TABLE"), special characters (""#!@""'☺"), and even the empty string ("").

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavidView Question on Stackoverflow
Solution 1 - SqlGuffaView Answer on Stackoverflow
Solution 2 - SqlMatthew FlaschenView Answer on Stackoverflow
Solution 3 - SqlWirawan PurwantoView Answer on Stackoverflow
Solution 4 - Sqleric.mcgregorView Answer on Stackoverflow