framework/db/QueryBuilder.php
public function getColumnType($type)
    {
        if ($type instanceof ColumnSchemaBuilder) {
            $type = $type->__toString();
        }

        if (isset($this->typeMap[$type])) {
            return $this->typeMap[$type];
        } elseif (preg_match('/^(\w+)\((.+?)\)(.*)$/', $type, $matches)) {
            if (isset($this->typeMap[$matches[1]])) {
                return preg_replace('/\(.+\)/', '(' . $matches[2] . ')', $this->typeMap[$matches[1]]) . $matches[3];
            }
        } elseif (preg_match('/^(\w+)\s+/', $type, $matches)) {
            if (isset($this->typeMap[$matches[1]])) {
                return preg_replace('/^\w+/', $this->typeMap[$matches[1]], $type);
            }
        }

        return $type;
    }
public function getColumnType($type)
    {
        if ($type instanceof ColumnSchemaBuilder) {
            $type = $type->__toString();
        }

        if (isset($this->typeMap[$type])) {
            return $this->typeMap[$type];
        } elseif (preg_match('/^(\w+)\((.+?)\)(.*)$/', $type, $matches)) {
            if (isset($this->typeMap[$matches[1]])) {
                return preg_replace('/\(.+\)/', '(' . $matches[2] . ')', $this->typeMap[$matches[1]]) . $matches[3];
            }
        } elseif (preg_match('/^(\w+)\s+/', $type, $matches)) {
            if (isset($this->typeMap[$matches[1]])) {
                return preg_replace('/^\w+/', $this->typeMap[$matches[1]], $type);
            }
        }

        return $type;
    }
Converts an abstract column type into a physical column type.

The conversion is done using the type map specified in [[typeMap]].
The following abstract column types are supported (using MySQL as an example to explain the corresponding
physical types):

- `pk`: an auto-incremental primary key type, will be converted into "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY"
- `bigpk`: an auto-incremental primary key type, will be converted into "bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY"
- `upk`: an unsigned auto-incremental primary key type, will be converted into "int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY"
- `char`: char type, will be converted into "char(1)"
- `string`: string type, will be converted into "varchar(255)"
- `text`: a long string type, will be converted into "text"
- `smallint`: a small integer type, will be converted into "smallint(6)"
- `integer`: integer type, will be converted into "int(11)"
- `bigint`: a big integer type, will be converted into "bigint(20)"
- `boolean`: boolean type, will be converted into "tinyint(1)"
- `float``: float number type, will be converted into "float"
- `decimal`: decimal number type, will be converted into "decimal"
- `datetime`: datetime type, will be converted into "datetime"
- `timestamp`: timestamp type, will be converted into "timestamp"
- `time`: time type, will be converted into "time"
- `date`: date type, will be converted into "date"
- `money`: money type, will be converted into "decimal(19,4)"
- `binary`: binary data type, will be converted into "blob"

If the abstract type contains two or more parts separated by spaces (e.g. "string NOT NULL"), then only
the first part will be converted, and the rest of the parts will be appended to the converted result.
For example, 'string NOT NULL' is converted to 'varchar(255) NOT NULL'.

For some of the abstract types you can also specify a length or precision constraint
by appending it in round brackets directly to the type.
For example `string(32)` will be converted into "varchar(32)" on a MySQL database.
If the underlying DBMS does not support these kind of constraints for a type it will
be ignored.

If a type cannot be found in [[typeMap]], it will be returned without any change.
@param string|ColumnSchemaBuilder $type abstract column type
@return string physical column type.