切换用户
- su 全称为 switch user
- 例如 su root 或者 su nginx
改变用户组和用户
- chown 全称为 change owner
- 例如 chown nginx:nginx 文件
查看进程 ps -ef|grep nginx
删除文件
rm -rf *
解压文件
unzip -d 目录名 zip包
mysql
CREATE TABLE `test_varchar_utf8` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
- 这里name字段数据类型为varchar长度指定为12,这个12究竟是字节数还是字符数呢?
- 发现,对于中文字符串,也可以插入包含12个字符以及小于12个字符的字符串,当大于12个字符时报错。 因为对于中文的字符一个字符占用三个字节,所以,说明varchar(n)中的n代表字符数而非字节数。
- 发现,对于非中文字符串,可以插入包含12个字符以及小于12个字符的字符串,当大于12个字符时报错。 因为对于非中文的字符一个字符占用一个字节,所以,至此还不能说明varchar(n)中的n究竟代表字节数还是字符数。
- 对于char类型,可以做类似的实验,结论相同
字节和字符的概念
-
字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。
-
字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、,中,国等等。
-
UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)字符等于三个字节。
-
Unicode编码中,一个英文等于两个字节,一个中文(含繁体)字符等于两个字节。
char和varchar括号中的数字含义
- char的列长度是固定的,char的长度可选范围在0-255字符之间。也就是char最大能存储255个字符.
- varchar的列长度是可变的,在mysql5.0.3之前varchar的长度范围为0-255字符,mysql5.0.3之后varchar的长度范围为0-65535个字节.
- CHAR(M)定义的列的长度为固定的,M取值可以为0-255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字符,都要占去10个字符的空间,不足的自动用空格填充。
- VARCHAR(M)定义的列的长度为可变长字符串,VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
int smallint等数据类型括号中的数字含义
- 这些类型,是定长的,其容量是不会随着后面的数字而变化的,比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节。
- 数据类型(m)中的m不是表示的数据长度,而是表示数据在显示时显示的最小长度。tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符。
- 当字符长度(m)超过对应数据类型的最大表示范围时,相当于啥都没发生;
- 当字符长度(m)小于对应数据类型的表示范围时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充)
- 即使你建表时,不指定括号数字,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。