必威体育Betway必威体育官网
当前位置:首页 > IT技术

在MySQL中,VARCHAR与CHAR的区别是什么?VARCHAR(50)中的50代表的含义是什么?

时间:2019-10-04 08:13:06来源:IT技术作者:seo实验室小编阅读:55次「手机版」
 

varchar

答案:CHAR是一种固定长度的类型,VARCHAR则是一种可变长度的类型。

CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

VARCHAR列中的值为可变长字符串。长度可以指定为0到65535之间的值。VARCHAR的最大有效长度由最大行大小和使用的字符集确定。在mysql 4.1之前的版本,VARCHAR(50)的“50”指的是50字节(bytes)。如果存放UTF8汉字时,那么最多只能存放16个(每个汉字3字节)。从MySQL 4.1版本开始,VARCHAR(50)的“50”指的是50字符(character),无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个。

CHAR和VARCHAR类型声明的长度表示保存的最大字符数。例如,CHAR(30)可以占用30个字符。对于MyISAM表,推荐CHAR类型;对于InnoDB表,推荐VARCHAR类型。另外,在进行检索的时候,若列值的尾部含有空格,则CHAR列会删除其尾部的空格,而VARCHAR则会保留空格。如下所示:

mysql> create table vc(v varchar(4), c char(4));

Query OK, 0 rows affected (0.02 sec)

mysql> desc vc;

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

| field | Type       | Null | Key | Default | Extra |

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

| v     | varchar(4) | YES  |     | NULL    |       |

| c     | char(4)    | YES  |     | NULL    |       |

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

mysql> insert into vc values('ab  ','ab  ');

Query OK, 1 row affected (0.03 sec)

mysql> select * from vc;

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

| v    | c    |

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

| ab   | ab   |

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

1 row in set (0.00 sec)

mysql> select length(v),length(c) from vc;

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

| length(v) | length(c) |

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

|         4 |         2 |

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

1 row in set (0.01 sec)

可以看到,c列的length只有2,下面给字段加上“+”:

mysql> select concat(v,'+'),concat(c,'+') from vc;

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

| concat(v,'+') | concat(c,'+') |

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

| ab  +         | ab+           |

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

1 row in set (0.00 sec)

mysql> select * from vc where v='ab';

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

| v    | c    |

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

| ab   | ab   |

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

1 row in set (0.00 sec)

mysql> select * from vc where c='ab';

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

| v    | c    |

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

| ab   | ab   |

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

1 row in set (0.00 sec)

mysql> select * from vc where c='ab  ';

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

| v    | c    |

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

| ab   | ab   |

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

1 row in set (0.00 sec)

mysql> select * from vc where v='ab  ';

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

| v    | c    |

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

| ab   | ab   |

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

1 row in set (0.00 sec)

相关阅读

解决Pycharm无法显示动态图片的问题

最近在学习的时候遇到了一个问题始终没有解决,这个博客写的也不是完全解决了这个问题。指示换了一种可行的思路而已。 在运行一些

编译器的选择(x86_amd64, amd64等的区别)

https://blog.csdn.net/WL2002200/article/details/52984241/结论32/64 位系统编译在32位系统上运行 => x8632 系统上编译64位系

Python3中列表del(),remove(),pop()三个函数

del():删除指定值 del  a[0] remove():移除指定值 a.remove("str") pop()获取并删除指定位置元素 A = ['a','b','c'] # pop

“中国YouTube”发展史

YouTube从最初的籍籍无名到现在国外的主流视频渠道,你知道它的前世今生吗?你了解它是如何发展到现在的头部地位吗?而在中国,有与YouTu

Excel2010中字体简繁转换的操作方法

Excel2010的简繁转换操作和EXCEL2007差不多,但貌似excel2010要比2007稳定多了,几乎未见2010丢失简繁转换功能的。今天,seo实验室小

分享到:

栏目导航

推荐阅读

热门阅读