VARCHAR(0-65535)/CHAR(0-255)差别於可储存长度差别之外。
VARCHAR的长度是不固定
的 EX:密码,CHAR的长度是固定
的EX:电话。
当我们设置CHAR(4),代表储存占有空间为4BYTES,VARCHAR(4)储存占有空间为实际我们传入值之长度
。
mysql> CREATE TABLE test1(a CHAR(4),b VARCHAR(4));
mysql> DESC test1;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| a | char(4) | YES | | NULL | |
| b | varchar(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
CHAR_LENGTH(a) 可获取其字串之长度。
LENGTH(a) 可获取其字串占有之BYTE。
mysql> SELECT CHAR_LENGTH(a) , CHAR_LENGTH(b) FROM test1;
+----------------+----------------+
| CHAR_LENGTH(a) | CHAR_LENGTH(b) |
+----------------+----------------+
| 3 | 3 |
+----------------+----------------+
1 row in set (0.01 sec)
mysql> SELECT LENGTH(a) ,LENGTH(b) FROM test1;
+-----------+-----------+
| LENGTH(a) | LENGTH(b) |
+-----------+-----------+
| 3 | 3 |
+-----------+-----------+
1 row in set (0.00 sec)
BINARY(4),d VARBINARY(4)对应CHAR及VARCHAR,但较少用到。
差别在於BINARY在未满设置的储存空间会以\0补齐
,也就是0x00。
mysql> CREATE TABLE test2(c BINARY(4),d VARBINARY(4));
mysql> INSERT INTO test2 values("a ","a ");
mysql> DESC test2;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| c | binary(4) | YES | | NULL | |
| d | varbinary(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
mysql> SELECT LENGTH(c) FROM test2;
可发现BINARY储存空间已被补齐。
+-----------+
| LENGTH(c) |
+-----------+
| 4 |
+-----------+
mysql> SELECT LENGTH(d) FROM test2;
+-----------+
| LENGTH(d) |
+-----------+
| 2 |
+-----------+
可以将BLOB视为储存更大的VARBINARY。同样,可以将TEXT视为储存更大的VARCHAR。
由於少见且不方便DEMO,故就简述带过。
前面文章有介绍过,这边也不多赘述。
mysql> CREATE TABLE shirts (
-> name VARCHAR(40),
-> size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
-> );
可以输入对应ENUM的下标
来节省时间。
INSERT INTO shirts values("polo2","1"); (取第一个ENUM所设置的值)
利用ENUM特性可以限制特定资料值,而不会出现ENUM所设置的资料范围之外的值。
mysql> INSERT INTO shirts values("polo2","big");
ERROR 1265 (01000): Data truncated for column 'size' at row 1
SET可以创建一个组合
,由我们所设置的值,来建立一个组合,并且以二进制为顺序
,依序对应不同组合,如 000(0) 对应 " " 空字串, 001(1) 对应 "one" ,111(7) 对应 "one,two,three"。
mysql> CREATE TABLE test3(a SET('one','two','three'));
Query OK, 0 rows affected (0.04 sec)
mysql> DESC test3;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| a | set('one','two','three') | YES | | NULL | |
+-------+--------------------------+------+-----+---------+-------+
mysql> INSERT INTO test3 values(0);
mysql> INSERT INTO test3 values(1);
mysql> INSERT INTO test3 values(7);
mysql> SELECT * FROM test3;
+---------------+
| a |
+---------------+
| |
| one |
| one,two,three |
+---------------+
SET值中设置N个值,即可获得2^N种组合。
今天假设我们需要改变资料之类型,并确保资料内的值不改变,可使用ALTER这个语法。
创建一个TABLE,并且插入值後。
mysql> CREATE TABLE user( username varchar(10) , password varchar(20) );
mysql> DESC user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(10) | YES | | NULL | |
| password | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> INSERT INTO user(username , password) values ("jojo","12334455");
mysql> SELECT * FROM user;
+----------+----------+
| username | password |
+----------+----------+
| jojo | 12334455 |
+----------+----------+
1 row in set (0.00 sec)
我们利用ALTER改变资料之类型(只能改变为与值相符的类型,比如此例无法将资料类型改为DATE、INTEGER...)。可发现值并无改变,且资料类型已经改变。
mysql> ALTER TABLE user MODIFY username CHAR(20);
Query OK, 1 row affected (0.12 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM user;
+----------+----------+
| username | password |
+----------+----------+
| jojo | 12334455 |
+----------+----------+
mysql> DESC user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | char(20) | YES | | NULL | |
| password | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
<<: 安全意识,培训和教育(security awareness, training and education)
>>: iOS APP 开发 OC 第十一天,block 简写
什麽是 Prototype Pattern? 将物件以拷贝的方式建立 如果某类物件在初始化时,会消耗...
这次我就沿用上篇的程序码接续练习转xlsx档。恩~所以这篇应该会满短的,主要是看我学习成果。XD 首...
案例说明及适用场景 也算是买卖业,但对象不是一般客户,而是厂商 面对厂商,一般来说都会有寄仓、月结收...
CSS的简写通常很直觉,会取每个音节的第一个字母来用,但有些似乎是有重叠的关系,就会不太一样,需要特...
前言 昨天讲完 Code Review,团队一致的写 code 风格,可以大幅提升 review 的...