数据库-列的类型-字符串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;
相关推荐
Jacky(易小天)8 分钟前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer2 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪3 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿3 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
无敌岩雀3 小时前
MySQL中的索引
数据库·mysql