When a table is created with "create table as select ...", version 2.8 does not use any type info from the old table when creating the new one; all it uses are the column names. Version 3 uses the type info but doesn't pick up at least some of the constraints. You can verify all this with "pragma table_info()".
If you really want to duplicate a table, get the table's sql from sqlite_master, change the table name, and execute that to create your new table; then fill the new table with "insert ... select ...". Regards