diff --git a/internal/engine/sqlite/convert.go b/internal/engine/sqlite/convert.go
index 29c06fb285..b253078b1e 100644
--- a/internal/engine/sqlite/convert.go
+++ b/internal/engine/sqlite/convert.go
@@ -107,26 +107,54 @@ func (c *cc) convertAttach_stmtContext(n *parser.Attach_stmtContext) ast.Node {
 }
 
 func (c *cc) convertCreate_table_stmtContext(n *parser.Create_table_stmtContext) ast.Node {
+	tokenStream := n.GetParser().GetTokenStream().(*antlr.CommonTokenStream)
+
 	stmt := &ast.CreateTableStmt{
 		Name:        parseTableName(n),
 		IfNotExists: n.EXISTS_() != nil,
+		Comment:     comment(tokenStream, n.OPEN_PAR().GetSymbol()),
 	}
+
 	for _, idef := range n.AllColumn_def() {
 		if def, ok := idef.(*parser.Column_defContext); ok {
 			typeName := "any"
 			if def.Type_name() != nil {
 				typeName = def.Type_name().GetText()
 			}
+
 			stmt.Cols = append(stmt.Cols, &ast.ColumnDef{
 				Colname:   identifier(def.Column_name().GetText()),
 				IsNotNull: hasNotNullConstraint(def.AllColumn_constraint()),
 				TypeName:  &ast.TypeName{Name: typeName},
+				Comment:   comment(tokenStream, def.GetStop()),
 			})
+
 		}
 	}
 	return stmt
 }
 
+// comment returns the comment associated with the given context.
+func comment(tokenStream *antlr.CommonTokenStream, from antlr.Token) string {
+	var (
+		hiddenTokens []antlr.Token
+		comment      string
+	)
+
+	hiddenTokens = tokenStream.GetHiddenTokensToRight(from.GetTokenIndex()+1, antlr.TokenHiddenChannel)
+
+	for _, token := range hiddenTokens {
+		// Filter for single-line comments
+		if token.GetTokenType() == parser.SQLiteLexerSINGLE_LINE_COMMENT {
+			// Remove "--" and leading/trailing whitespaces
+			comment = strings.TrimSpace(strings.TrimPrefix(token.GetText(), "--"))
+			return comment
+		}
+	}
+
+	return ""
+}
+
 func (c *cc) convertCreate_virtual_table_stmtContext(n *parser.Create_virtual_table_stmtContext) ast.Node {
 	switch moduleName := n.Module_name().GetText(); moduleName {
 	case "fts5":