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;