Support decimal data type in 4.*, and reduce logic complexity

The "unsinged" is optional value, so check the value rather than forcing.

```
'tinyint' + (unsigned ? ' unsigned' : '')
```