diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,7 +1,11 @@
+## 2.3.0.1
+
+Support usign default= for changing the id field type
+
 ## 2.3
 
-* Distinguish between binary and non-binary strings in MySQL [451](https://github.com/yesodweb/persistent/pull/451)
-	* Previously all string columns (VARCHAR, TEXT, etc.) were being returned from Persistent as `PersistByteString`s (i.e. as binary data). Persistent now checks character set information to determine if the value should be returned as `PersistText` or `PersistByteString`. 
+* Distinguish between binary and non-binary strings in MySQL [#451](https://github.com/yesodweb/persistent/pull/451)
+	* Previously all string columns (VARCHAR, TEXT, etc.) were being returned from Persistent as `PersistByteString`s (i.e. as binary data). Persistent now checks character set information to determine if the value should be returned as `PersistText` or `PersistByteString`.
 	* This is a **breaking change** if your code is relying on a `PersistByteString` being returned for string-like MySQL values; persistent-mysql itself had several runtime errors that needed to be fixed because of this patch. High-level code dealing purely with `PersistEntities` should be unaffected.
 
 ## 2.2
diff --git a/Database/Persist/MySQL.hs b/Database/Persist/MySQL.hs
--- a/Database/Persist/MySQL.hs
+++ b/Database/Persist/MySQL.hs
@@ -22,6 +22,7 @@
 import Control.Monad.Trans.Error (ErrorT(..))
 import Control.Monad.Trans.Reader (runReaderT)
 import Control.Monad.Trans.Writer (runWriterT)
+import Data.Monoid ((<>))
 import Data.Aeson
 import Data.Aeson.Types (modifyFailure)
 import Data.ByteString (ByteString)
@@ -355,7 +356,20 @@
       name = entityDB entity
       idtxt = case entityPrimary entity of
                 Just pdef -> concat [" PRIMARY KEY (", intercalate "," $ map (escapeDBName . fieldDB) $ compositeFields pdef, ")"]
-                Nothing   -> concat [escapeDBName $ fieldDB $ entityId entity, " BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY"]
+                Nothing ->
+                  let defText = defaultAttribute $ fieldAttrs $ entityId entity
+                      sType = fieldSqlType $ entityId entity
+                      autoIncrementText = case (sType, defText) of
+                        (SqlInt64, Nothing) -> " AUTO_INCREMENT"
+                        _ -> ""
+                      maxlen = findMaxLenOfField (entityId entity)
+                  in concat
+                         [ escapeDBName $ fieldDB $ entityId entity
+                         , " " <> showSqlType sType maxlen False
+                         , " NOT NULL"
+                         , autoIncrementText
+                         , " PRIMARY KEY"
+                         ]
 
 -- | Find out the type of a column.
 findTypeOfColumn :: [EntityDef] -> DBName -> DBName -> (DBName, FieldType)
@@ -375,18 +389,23 @@
          ((,) col) $ do
            entDef     <- find ((== name) . entityDB) allDefs
            fieldDef   <- find ((== col) . fieldDB) (entityFields entDef)
-           maxLenAttr <- find ((T.isPrefixOf "maxlen=") . T.toLower) (fieldAttrs fieldDef)
-           readMaybe . T.unpack . T.drop 7 $ maxLenAttr
+           findMaxLenOfField fieldDef
 
--- | Helper for 'AddRefence' that finds out the 'entityId'.
+-- | Find out the maxlen of a field
+findMaxLenOfField :: FieldDef -> Maybe Integer
+findMaxLenOfField fieldDef = do
+    maxLenAttr <- find ((T.isPrefixOf "maxlen=") . T.toLower) (fieldAttrs fieldDef)
+    readMaybe . T.unpack . T.drop 7 $ maxLenAttr
+
+-- | Helper for 'AddReference' that finds out the which primary key columns to reference.
 addReference :: [EntityDef] -> DBName -> DBName -> DBName -> AlterColumn
-addReference allDefs fkeyname reftable cname = AddReference reftable fkeyname [cname] [id_] 
+addReference allDefs fkeyname reftable cname = AddReference reftable fkeyname [cname] referencedColumns
     where
-      id_ = maybe (error $ "Could not find ID of entity " ++ show reftable
-                         ++ " (allDefs = " ++ show allDefs ++ ")")
-                  id $ do
-                    entDef <- find ((== reftable) . entityDB) allDefs
-                    return (fieldDB $ entityId entDef)
+      referencedColumns = maybe (error $ "Could not find ID of entity " ++ show reftable
+                                  ++ " (allDefs = " ++ show allDefs ++ ")")
+                                id $ do
+                                  entDef <- find ((== reftable) . entityDB) allDefs
+                                  return $ map fieldDB $ entityKeyFields entDef
 
 data AlterColumn = Change Column
                  | Add' Column
@@ -394,7 +413,12 @@
                  | Default String
                  | NoDefault
                  | Update' String
-                 | AddReference DBName DBName [DBName] [DBName]
+                 -- | See the definition of the 'showAlter' function to see how these fields are used.
+                 | AddReference
+                    DBName -- ^ Referenced table
+                    DBName -- ^ Foreign key name
+                    [DBName] -- ^ Referencing columns
+                    [DBName] -- ^ Referenced columns
                  | DropReference DBName
 
 type AlterColumn' = (DBName, AlterColumn)
diff --git a/persistent-mysql.cabal b/persistent-mysql.cabal
--- a/persistent-mysql.cabal
+++ b/persistent-mysql.cabal
@@ -1,5 +1,5 @@
 name:            persistent-mysql
-version:         2.3
+version:         2.3.0.1
 license:         MIT
 license-file:    LICENSE
 author:          Felipe Lessa <felipe.lessa@gmail.com>, Michael Snoyman
