MySQL CHAR和VARCHAR数据类型介绍
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,CHAR类型是固定长度的,长度范围为0到255。如果存储的值不覆盖字段长度,存储数据的其他的部分会在值的右边自动添加空格。VARCHAR字段中的值是可变长度的字符串,长度范围为0到65535。VARC
千家信息网最后更新 2026年11月01日MySQL CHAR和VARCHAR数据类型介绍CHAR类型是固定长度的,长度范围为0到255。如果存储的值不覆盖字段长度,存储数据的其他的部分会在值的右边自动添加空格。
VARCHAR字段中的值是可变长度的字符串,长度范围为0到65535。VARCHAR字段的值以1字节或2字节的长度前缀加上数据的方式存储。长度前缀指示了字段存储的字节数,如果一个字段存储的值不超过255字节,它使用一个长度前缀,如果字段存储的值超过了255字节,它使用两个长度前缀。
如果没有启用严格SQL模式,分配给CHAR或VARCHAR字段超过字段最大长度的值,这个值会被截断保存到数据库中,并会产生一个警告。对于VARCHAR字段来说,不管使用什么样的SQL模式,分配给VARCHAR字段超过字段最大长度的值,在值插入前,超过字段最大长度的部分会被截断,并会产生一个警告。对于CHAR字段来说,不管使用什么样的SQL模式,超过字段最大长度的部分会被截断,并隐式插入到数据库中。
--测试①
MariaDB [test]> show variables like '%sql%mode%';
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.26 sec)
MariaDB [test]> drop table vc;
Query OK, 0 rows affected (0.04 sec)
MariaDB [test]> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.54 sec)
MariaDB [test]> INSERT INTO vc VALUES ('ab ', 'ab ');
Query OK, 1 row affected (0.14 sec)
--查看插入的数据中是否保留空格
MariaDB [test]> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (ab ) | (ab) |
+---------------------+---------------------+
1 row in set (0.00 sec)
MariaDB [test]> select length(v),length(c) from vc;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
| 4 | 2 |
+-----------+-----------+
1 row in set (0.00 sec)
--插入超过字段最大值的数据到表中
MariaDB [test]> insert into vc values('abcdefg','abcedeg');
Query OK, 1 row affected, 2 warnings (0.03 sec)
MariaDB [test]> show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'v' at row 1 |
| Warning | 1265 | Data truncated for column 'c' at row 1 |
+---------+------+----------------------------------------+
2 rows in set (0.00 sec)
MariaDB [test]> select * from vc;
+------+------+
| v | c |
+------+------+
| ab | ab |
| abcd | abce |
+------+------+
2 rows in set (0.00 sec)
--测试②
MariaDB [test]> CREATE TABLE names (myname CHAR(10));
Query OK, 0 rows affected (0.13 sec)
MariaDB [test]> INSERT INTO names VALUES ('Monty');
Query OK, 1 row affected (0.00 sec)
--查看表中数据在WHERE条件中使用=的条件中带空格的执行情况
MariaDB [test]> SELECT myname = 'Monty', myname = 'Monty ' FROM names;
+------------------+--------------------+
| myname = 'Monty' | myname = 'Monty ' |
+------------------+--------------------+
| 1 | 1 |
+------------------+--------------------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names;
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> select length(myname) from names;
+----------------+
| length(myname) |
+----------------+
| 5 |
+----------------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
--查看表中的数据在like条件下的执行情况
MariaDB [test]> SELECT myname LIKE 'Monty', myname LIKE 'Monty ' FROM names;
+---------------------+-----------------------+
| myname LIKE 'Monty' | myname LIKE 'Monty ' |
+---------------------+-----------------------+
| 1 | 0 |
+---------------------+-----------------------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like '%Monty%';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty%';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty %';
Empty set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty %';
Empty set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty %';
Empty set (0.00 sec)
VARCHAR字段中的值是可变长度的字符串,长度范围为0到65535。VARCHAR字段的值以1字节或2字节的长度前缀加上数据的方式存储。长度前缀指示了字段存储的字节数,如果一个字段存储的值不超过255字节,它使用一个长度前缀,如果字段存储的值超过了255字节,它使用两个长度前缀。
如果没有启用严格SQL模式,分配给CHAR或VARCHAR字段超过字段最大长度的值,这个值会被截断保存到数据库中,并会产生一个警告。对于VARCHAR字段来说,不管使用什么样的SQL模式,分配给VARCHAR字段超过字段最大长度的值,在值插入前,超过字段最大长度的部分会被截断,并会产生一个警告。对于CHAR字段来说,不管使用什么样的SQL模式,超过字段最大长度的部分会被截断,并隐式插入到数据库中。
--测试①
MariaDB [test]> show variables like '%sql%mode%';
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.26 sec)
MariaDB [test]> drop table vc;
Query OK, 0 rows affected (0.04 sec)
MariaDB [test]> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.54 sec)
MariaDB [test]> INSERT INTO vc VALUES ('ab ', 'ab ');
Query OK, 1 row affected (0.14 sec)
--查看插入的数据中是否保留空格
MariaDB [test]> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (ab ) | (ab) |
+---------------------+---------------------+
1 row in set (0.00 sec)
MariaDB [test]> select length(v),length(c) from vc;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
| 4 | 2 |
+-----------+-----------+
1 row in set (0.00 sec)
--插入超过字段最大值的数据到表中
MariaDB [test]> insert into vc values('abcdefg','abcedeg');
Query OK, 1 row affected, 2 warnings (0.03 sec)
MariaDB [test]> show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'v' at row 1 |
| Warning | 1265 | Data truncated for column 'c' at row 1 |
+---------+------+----------------------------------------+
2 rows in set (0.00 sec)
MariaDB [test]> select * from vc;
+------+------+
| v | c |
+------+------+
| ab | ab |
| abcd | abce |
+------+------+
2 rows in set (0.00 sec)
--测试②
MariaDB [test]> CREATE TABLE names (myname CHAR(10));
Query OK, 0 rows affected (0.13 sec)
MariaDB [test]> INSERT INTO names VALUES ('Monty');
Query OK, 1 row affected (0.00 sec)
--查看表中数据在WHERE条件中使用=的条件中带空格的执行情况
MariaDB [test]> SELECT myname = 'Monty', myname = 'Monty ' FROM names;
+------------------+--------------------+
| myname = 'Monty' | myname = 'Monty ' |
+------------------+--------------------+
| 1 | 1 |
+------------------+--------------------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names;
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> select length(myname) from names;
+----------------+
| length(myname) |
+----------------+
| 5 |
+----------------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname = 'Monty ';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
--查看表中的数据在like条件下的执行情况
MariaDB [test]> SELECT myname LIKE 'Monty', myname LIKE 'Monty ' FROM names;
+---------------------+-----------------------+
| myname LIKE 'Monty' | myname LIKE 'Monty ' |
+---------------------+-----------------------+
| 1 | 0 |
+---------------------+-----------------------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like '%Monty%';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty%';
+--------+
| myname |
+--------+
| Monty |
+--------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty %';
Empty set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty %';
Empty set (0.00 sec)
MariaDB [test]> SELECT * FROM names where myname like 'Monty %';
Empty set (0.00 sec)
字段
长度
数据
存储
最大
字节
前缀
条件
模式
空格
部分
情况
数据库
范围
分配
测试
类型
两个
右边
字符
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州为想互联网科技有限公司
广东猪兼强互联网科技有限公司
中国互联网科技工作委员会毛军
北京互联网络科技有限公司
华中科技大学互联网
互联网科技类展会
丰台科技园 互联网公司
开启互联网科技时代小说
深圳前海聚择互联网科技有限公司
互联网科技与大数据专业
深圳无忧互联网科技
广州富喜互联网络科技
21世纪互联网科技成就
普陀区互联网教育科技管理办法
云南互联网科技学费
米泉互联网科技专业怎么样
北京军民互联网科技公司
黑龙江互联网科技公司
前海云享互联网科技
广州全民伙伴互联网科技有限公司
互联网科技公司经营范围
互联网科技视频
宜安科技 互联网金融
银优互联网科技有限公司
互联网 视角下的科技创新
搜狐科技互联网
深圳市优智互联网科技有限公司
燊美集互联网科技有限公司
科技互联网公司两年变化
第三届互联网大会安防黑科技