MySQL对char和varchar长度的解释

这篇文章纯属实践检验型的,没有技术分析的成分。这段时间在建表的时候,对字符串存取时设置预置大小时产生了一些小得疑问,所以就自己检验了下。要是平时不太注意的同学也可以参考下。

实验

首先我们建立一个数据表

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(5) NOT NULL DEFAULT '',
  `ic_number` varchar(18) NOT NULL DEFAULT '',
  `bank_card` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name_number` (`name`,`ic_number`)
) ENGINE=InnoDB AUTO_INCREMENT=374 DEFAULT CHARSET=utf8;

表的结构如下:

mysql> desc test;
+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| name      | varchar(5)       | NO   | MUL |         |                |
| ic_number | varchar(18)      | NO   |     |         |                |
| bank_card | varchar(30)      | YES  |     | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

我们插入如下数据

INSERT INTO `test` (`id`, `name`, `ic_number`, `bank_card`)
VALUES
    (289, '王晓明', '111111111111111111', '222222222222222222');
mysql> INSERT INTO `test` (`id`, `name`, `ic_number`, `bank_card`)
    -> VALUES
    -> (289, '王晓明', '111111111111111111', '222222222222222222');
Query OK, 1 row affected (0.00 sec)

插入成功,这是我们将我们插入的name修改成,a是王晓明,同样可以插入成功,然而当我们在插入name=’ab是王晓明’时

mysql> INSERT INTO `test` (`id`, `name`, `ic_number`, `bank_card`)
    -> VALUES
    -> (289, 'ab是王晓明', '111111111111111111', '222222222222222222');
ERROR 1406 (22001): Data too long for column 'name' at row 1

返回数据长度超过了最大长度,这个实验在没有遇到具体场景的时候确实不明白目的是什么,现在我来大致总结下结论

结论

varchar

的长度限制的是插入字符串字符的长度,而不是字节的长度。所以当我们在建表的时候,我们不用去考虑插入的字符串是汉字还是字母或者数字,只需要按照字符来统计就行
同样,我实验了char也得到了同样的结论,需要注意的是char设置的字符串长度,而varchar设置的字符串最大长度,两者的区别是在对char插入一个不足最大长度的字符串时,后边会补空,而varchar则不会

最后附上我从w3cschool上看到的几个主流数据库对这些数据类型的解释,共大家参考

Microsoft access

PhpStorm配置选项

MySQL

PhpStorm配置选项 PhpStorm配置选项 PhpStorm配置选项

SQL Server

PhpStorm配置选项 PhpStorm配置选项 PhpStorm配置选项 PhpStorm配置选项

本文遵守 CC-BY-NC-4.0 许可协议。

Creative Commons License

欢迎转载,转载需注明出处,且禁止用于商业目的。

上篇Apache vhost
下篇Git实现代码自动部署