数据库-列的类型-字符串char类型

char 和 varchar 类型

char 类型懂得都懂就是固定的字符串类型 char (maxLen)

例如 char(5) 这个长度为5 但插入数据'a'时 是5 插入abc 也是5 即使插满固定

就像C/C++语言里 char 字符数组一样

cpp 复制代码
char str[64];

maxLen==255 哈哈最多有255个字符多了我认为你是错误

varchar 类型顾名思义可变字符串类型 varchar (maxLen)但 长度可以达到 1-65535

实际指定的的varchar(4)

插入的字符串 长度 插入后字段内容
'' 1 ''(空字符)
'1' 2 '1'
'12' 3 '12'
'123' 4 '123'
'1234' 5 '1234'(不保留空字符,只存储实际字符)
'12345' 6 '1234'(截断超出部分,不保留空字符)
bash 复制代码
mysql> use StringCharStudy;
Database changed
mysql> create table StringCharTypes (Ch char(5),Vch varchar(5));
Query OK, 0 rows affected (0.07 sec)

mysql> #插入正常数据
mysql> insert into Stringchartypes values ('12345','12345');
Query OK, 1 row affected (0.01 sec)

mysql> select *from stringchartypes;
+-------+-------+
| Ch    | Vch   |
+-------+-------+
| 12345 | 12345 |
+-------+-------+
1 row in set (0.00 sec)

mysql>
mysql> #插入包含空格数据 char 会截断后面的空格, varchar 不会截断后面的空格
mysql> insert into stringchartypes values('1 2  ','1 2   ');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> #由于存储方式不同 char 保留空格是从'1 2'2之后的空格当做结束符 相当于c/c++ 的字符串结束符
mysql> # varchar 保留完整 不以空格为结束符 只以输入的字符串 为准 输入多少字符接受 多少字符,当然只要超出范围那么我只能报错 因为 我指定长度能接受范围不能超过 n
mysql> # 我实际存储的是 [len=2]('1') [len=1]('') 我没有0 只有1 [len=3]('1 ') [len=4]('1 2') [len=5]('1 2 ')  [len=6]('1 2  ') 实际varchar(5) +1或者+2 才是存储+维护长度的稳定
mysql> select *from stringchartypes;
+-------+-------+
| Ch    | Vch   |
+-------+-------+
| 12345 | 12345 |
| 1 2   | 1 2   |
+-------+-------+
2 rows in set (0.00 sec)

mysql> # 在数据输出加入格式 格式为:(12345) 
mysql> select concat('(',ch,')'),concat('(',vch,')') from stringchartypes;
+--------------------+---------------------+
| concat('(',ch,')') | concat('(',vch,')') |
+--------------------+---------------------+
| (12345)            | (12345)             |
| (1 2)              | (1 2  )             |
+--------------------+---------------------+
2 rows in set (0.00 sec)

mysql> # 插入数据大于实际指定的长度插入失败                 
mysql>  insert into stringchartypes values('123456','123456');
ERROR 1406 (22001): Data too long for column 'Ch' at row 1
mysql>  insert into stringchartypes values('12345','123456');
ERROR 1406 (22001): Data too long for column 'Vch' at row 1
mysql> insert into stringchartypes values('1 2    ','1 2     '); # 现在有七个字符 统统截断 并且只针对于varchar 
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings; 
+-------+------+------------------------------------------+
| Level | Code | Message                                  |
+-------+------+------------------------------------------+
| Note  | 1265 | Data truncated for column 'Vch' at row 1 |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)

mysql> select concat('(',ch,')'),concat('(',vch,')') from stringchartypes;
+--------------------+---------------------+
| concat('(',ch,')') | concat('(',vch,')') |
+--------------------+---------------------+
| (12345)            | (12345)             |
| (1 2)              | (1 2  )             |
| (1 2)              | (1 2  )             |
+--------------------+---------------------+
sql 复制代码
#char 字符串类型
create database StringCharStudy;

use StringCharStudy;

create table StringCharTypes (Ch char(5),Vch varchar(5));
#插入正常数据
insert into Stringchartypes values ('12345','12345');
select *from stringchartypes;

#插入包含空格数据 char 会截断后面的空格, varchar 不会截断后面的空格
insert into stringchartypes values('1 2  ','1 2   ');
#由于存储方式不同 char 保留空格是从'1 2'2之后的空格当做结束符 相当于c/c++ 的字符串结束符   
# varchar 保留完整 不以空格为结束符 只以输入的字符串 为准 输入多少字符接受 多少字符,当然只要超出范围那么我只能报错 因为 我指定长度能接受范围不能超过 n 
# 我实际存储的是 [len=2]('1') [len=1]('') 我没有0 只有1 [len=3]('1 ') [len=4]('1 2') [len=5]('1 2 ')  [len=6]('1 2  ') 实际varchar(5) +1或者+2 才是存储+维护长度的稳定 
select *from stringchartypes;

# 在数据输出加入格式 格式为:(12345) 
select concat('(',ch,')'),concat('(',vch,')') from stringchartypes;
 
 # 插入数据大于实际指定的长度插入失败
 insert into stringchartypes values('123456','123456');
 insert into stringchartypes values('12345','123456');

 # 插入数据大于实际指定的长度 若是 使用空格填充剩余的 那么会截掉
insert into stringchartypes values('1 2    ','1 2     '); # 现在有七个字符 统统截断 并且只针对于varchar 

select concat('(',ch,')'),concat('(',vch,')') from stringchartypes;
相关推荐
西岭千秋雪_33 分钟前
Redis性能优化
数据库·redis·笔记·学习·缓存·性能优化
极限实验室1 小时前
INFINI Labs 产品更新 | INFINI Console 1.29.6 发布 – 优化监控图表异常毛刺等
数据库·产品
先睡1 小时前
优化MySQL查询
数据库·sql
小张是铁粉1 小时前
oracle的内存架构学习
数据库·学习·oracle·架构
专注API从业者1 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
藏在歌词里1 小时前
数据库-元数据表
数据库
小乌龟不会飞2 小时前
Ubuntu 安装 etcd 与 etcd-cpp-apiv3
数据库·etcd
程序员岳焱9 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
计算机毕设定制辅导-无忧学长10 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
程序员柳10 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui