char 和 varchar的区别
char 固定长度
varchar 可变长
char:定长
varchar:变长
#宽度指的是字符的个数
create table t13(name char(5));
create table t14(name varchar(5));
insert into t13 values('李杰 '); #'李杰 '
insert into t14 values('李杰 '); #'李杰 '
select char_length(name) from t13; #5
select char_length(name) from t14; #3
select name from t13 where name='李杰';
select name from t13 where name like '李杰';
name char(5)
egon |alex |wxx |
name varchar(5)
1bytes+egon|1bytes+alex|1bytes+wxx|
4+egon|4+alex|3+wxx|
注意:
1、char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形
SET sql_mode = 'pad_char_to_full_length';
2、 虽然 CHAR 和 VARCHAR 的存储方式不太相同,但是对于两个字符串的比较,都只比 较其值,忽略 CHAR 值存在的右填充,即使将 SQL MODE 设置为 PAD_CHAR_TO_FULL LENGTH 也一样,,但这不适用于like
mysql> SELECT myname = 'Monty', myname = 'Monty ' FROM names;
+------------------+--------------------+
| myname = 'Monty' | myname = 'Monty ' |
+------------------+--------------------+
| 1 | 1 |
+------------------+--------------------+
row in set (0.00 sec)
mysql> SELECT myname LIKE 'Monty', myname LIKE 'Monty ' FROM names;
+---------------------+-----------------------+
| myname LIKE 'Monty' | myname LIKE 'Monty ' |
+---------------------+-----------------------+
| 1 | 0 |
+---------------------+-----------------------+
row in set (0.00 sec)
总结:
虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
delete 和 truncate 的区别
使用方法:
情况1,清空表所有记录
1、delete from [table];
2、truncate [table];
情况2,删除表部分记录,只能用select
select from table where [condition]
区别:
1、delete 可以返回被删除记录数,而truncate返回的是0.
2、如果一个表中有自增字段,truncates删除所有记录后,新增数据id从1开始,
delete删除所有记录 新增的数据,仍然是以删除前的最后一条记录作为起始。
3、truncate速度快,delete速度慢。