Looks pretty good by design, especially as opposed to other attempts to implement this. Does it have to be named _build_create_table_attributes() though? Sure, it has to be descriptive and this is only internal, so we don't really have to care about saving time for end users, but it still feels unnecessarily long and not consistent with the rest of the forge methods. How about i.e. _table_attributes()?

There's some other stuff that needs to be polished, but that's mostly routine:

Changelog entry and documentation update.

Spacing. We use tabs only, you seem to be mixing both and even the diff here on github looks oddly aligned.

You're patching mysqli_driver.php, instead of mysqli_forge.php.

pdo/mysql also needs to have this and I'm not sure about CUBRID (it pretty much aims to be a MySQL clone).

Not sure about this {@inheritdoc} thing. I must admit this is the first time I see it and it probably makes sense, but we've never used it and that's probably for a reason.

No need to call parent::<method>() if the parent does nothing and other kinds of micro-optimizations - these I can do afterwards.