Sqlite: - 接近“UNSIGNED”:语法错误

时间:2014-03-21 09:19:09

标签: c# sqlite

string createAppUserTableSQL = @"CREATE TABLE Alarm (  id INT(10) UNSIGNED NOT NULL  AUTOINCREMENT,  title VARCHAR(128) NOT NULL, description TINYTEXT NOT NULL, status  ENUM('pending','enabled','disabled','retired') NOT NULL,create_date TIMESTAMP NOT NULL  DEFAULT CURRENT_TIMESTAMP,modify_date TIMESTAMP NULL DEFAULT NULL,modify_user INT(11) NULL DEFAULT NULL,modify_reason TINYTEXT NULL DEFAULT NULL,PRIMARY KEY (`id`),INDEX `alarm_index` (`id` ASC, `title` ASC))ENGINE = InnoDB DEFAULT CHARACTER SET = utf8";

请帮助解决此问题

1 个答案:

答案 0 :(得分:1)

  1. SQLite使用dynamic typing;所有这些特定的数据类型都被忽略了。
  2. 字段长度(如(10))必须位于数据类型的末尾。 (但无论如何它都被忽略了。)
  3. autoincrementing column需要INTEGER,而非INT。
  4. SQLite没有ENUM。要强制执行此限制,可以使用CHECK约束。
  5. 时间戳没有特殊的数据类型。 SQLite使用字符串(默认)或数字。
  6. 表定义可以包含列约束和表约束,但是正常的'索引不是这样的约束。要创建索引,请使用单独的CREATE INDEX语句。
  7. 使用`backticks`转义标识符是一个MySQL怪癖;标准SQL将使用"双引号"。
  8. SQLite没有ENGINE或DEFAULT CHARACTER SET选项。
  9. CREATE TABLE Alarm (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT NOT NULL,
        description TEXT NOT NULL,
        status TEXT CHECK (status IN ('pending', 'enabled', 'disabled', 'retired')),
        create_date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
        modify_date TEXT,
        modify_user INTEGER,
        modify_reason TEXT
    );
    CREATE INDEX alarm_index ON Alarm(id, title);