預設是有符号的,預設符号為空格
create table 表名(x tinyint);
設定為沒有符号的
create table 表名(x tinyint unsigned);
強調
整型類型後面的寬度限制的不是存儲寬度,限制的是顯示寬度
float: 推薦使用float,用float足夠用了
create table 表名(x float(255,30));
double: 比float更加精确小數點後面的數字
create table 表名(x double(255,30));
decimal: 用于機器的精确度,隻有在某種特殊情況才會使用,不過我認為我這輩子也用不上這個
create table 表名(x decimal(65,30));
year 1999
data 1999-11-11
time 08:00:00
datetime 1999-11-11 08:00:00
timestamp 1999-11-11 08:00:00
create table student(
id int primary key auto_increment,
name varchar(16),
born_year year,
birth data,
class_time time,
reg_time datetime);
insert into studnet(name,born_year,birth,class_time,reg_time) values('lxx',now(),now(),now(),now());
timestamp與datetime的差別
timestamp與datetime的差別在于timestamp會自動生成一個時間,而datetime要手動輸入
char: 定長
name char(5),
varchar: 變長
寬度指的都是最大存儲的字元個數,超過了都無法正常存儲
不同的地方是 char(5) 如果沒有夠5個字元 就會被mysql預設添加不夠的空格,最多也是隻能顯示5個字元
而varchar(5) 寫了幾個就是幾個字元,最多顯示5個字元
可以設定成存的時候在存,取的時候就是存的時候的樣子
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
需要注意的
mysql在查詢時針對where 字段="值 "會忽略掉右邊的空格,既where 字段="值", 如果是like模糊比對就不會忽略右面的空格了
insert info emp values("lxx","male","read,play");
insert info emp values('wxx',"male","read,play");
create table emp(
name varchar(15),
sex enum('male','female','unkown'),
hobbies set('read','music','yinshi','play'));