MySQL 字串类型资料之基本操作

VARCHAR & CHAR

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 & VARBINARY

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 & TEXT

可以将BLOB视为储存更大的VARBINARY。同样,可以将TEXT视为储存更大的VARCHAR。
由于少见且不方便DEMO,故就简述带过。

ENUM

前面文章有介绍过,这边也不多赘述。

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

SET可以创建一个组合,由我们所设置的值,来建立一个组合,并且以二进制为顺序,依序对应不同组合,如 000(0) 对应 " " 空字串, 001(1) 对应 "one"  ,111(7) 对应 "one,two,three"。

http://img2.58codes.com/2024/201261820WKuwkRKdH.png

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 table_name MODIFY column_name data_type

今天假设我们需要改变资料之类型,并确保资料内的值不改变,可使用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: 0mysql> 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    |       |+----------+-------------+------+-----+---------+-------+

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章