mysql文字数据类型_MySQL数据类型 - 字符

我们常用到的MySQL字符型数据类型主要有3类:

char

varchar

text

char和varchar

在定义char和varchar列时可以申明1个数字参数,用于表明该列所能够存储的最大字符数,例如char(4)和varchar(4)能够存储最多4个字符。

char和varchar的区别主要体现在存储所需字节数、对字符串末尾空格的处理方式和最大字符数上:

char以固定字节数存储;varchar以可变字节数存储,并使用1个额外的字节存储字符串的长度,以下以UTF8(每字符3字节)编码为例:

char(4)存储所需字节数

varchar(4)存储所需字节数

''

12

1

'a'

12

2

'一二'

12

7

'一二三四'

12

13

char在查询时会自动去除字符串末尾的空格;varchar则会保留字符串末尾的空格,例如:

mysql> create table t1(c1 char(4), c2 varchar(4));

Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1(c1, c2) values('a ', 'a ');

Query OK, 1 row affected (0.00 sec)

mysql> select concat(c1, 'b'), concat(c2, 'b') from t1;

+-----------------+-----------------+

| concat(c1, 'b') | concat(c2, 'b') |

+-----------------+-----------------+

| ab | a b |

+-----------------+-----------------+

1 row in set (0.00 sec)

在使用UTF8编码时,char列最多能存储255个字符;varchar列最多能存储21844个字符。

text

根据最大字符数和存储所需的字节数,text分为:

类型

最大字符数

存储所需字节数(UTF8编码)

tinytext

255

字符数 * 3 + 1

text

65535

字符数 * 3 + 2

mediumtext

16777215=16M

字符数 * 3 + 3

longtext

4294967295=4G

字符数 * 3 + 4

text对于字符串末尾空格的处理方式与varchar一致。

Tips

char以固定字节数存储,性能较高,但可能浪费存储空间,应权衡使用。

text的数据存储在行外,行内只存储指针,性能较低,应尽量避免使用。

字符列在与字符串比较时,对于末尾空格,=运算符会忽略空格,like运算符则不会,例如:

mysql> create table t1(c1 varchar(4));

Query OK, 0 rows affected (1.29 sec)

mysql> insert into t1 values('a ');

Query OK, 1 row affected (0.00 sec)

mysql> select * from t1 where c1 = 'a ';

+------+

| c1 |

+------+

| a |

+------+

1 row in set (0.00 sec)

mysql> select * from t1 where c1 = 'a';

+------+

| c1 |

+------+

| a |

+------+

1 row in set (0.00 sec)

mysql> select * from t1 where c1 like 'a ';

+------+

| c1 |

+------+

| a |

+------+

1 row in set (0.00 sec)

mysql> select * from t1 where c1 like 'a';

Empty set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值