对于整数和负整数来讲,默认状况下是有符号范围的mysql
默认
是有符号
sql
有符号和没符号其实就是有没有包括负数,有符号是包括负数的
数据库
设置成无符号:编码
alter table 表名 变量名 数据类型 unsigned;翻译
严格模式 | 非严格模式 | |
---|---|---|
有符号 | (-,+) 超出范围会报错 | (-,+) 超出范围取极值 |
无符号 | (0,+) 超出范围会报错 | (0,+) 超出范围取极值 |
咱们不推荐使用非严格模式下
创建table,由于它会可能形成数据丢失的状况,因此咱们必须在5.6版本中将mysql设置为严格模式。code
方法一:select@@sql_mode; @表示全局变量;@@表示会话级变量(局部)索引
临时设置set @@sql_mode ='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES ';ci
方法二:直接修改配置文件;字符串
[mysqld]table
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 并重启服务端mysql后生效.
严选状况下,数据超过他的设置范围他会报错
非严选状况下,数据超过他的设置范围不会报错,可是只存他设置大小的那一部分的数据,多余的会丢掉
数据类型 | 字节数 | 符号范围 | 有符号范围 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32767 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 |
INT | 4 | 0~4294967295 | -2147483648~2147483647 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808 ~9223372036854775807 |
数据类型 | 字节数 | 符号范围 | 有符号范围 |
---|---|---|---|
float | 4 | 1.175494351E-38 ~3.402823466E +38 |
-3.402823466E+38~ -1.175494351E-38 |
double | 8 | 2.2250738585072014E-308 ~1.7976931348623157E+308 |
-1.7976931348623157E+308 ~-2.2250738585072014E- 308 |
decimal[(M[,D])] | 最大与 double相同 |
不固定 | 不固定 10.2 decimal(3,1); |
char:定长字符串,字符长度0-255个字节之间,存储时占用固定字节空间
相对于varchar来说
优势: 读取存储速度快于varchar
varchar:可变长度字符串,字符长度在0-65532个字节,存储式占用空间实际字节长度+1,而+1是存的他的长度
缘由
:由于char咱们若是规定6,而后输入3个字符,他后面的内容会用宫格来填充,而varchar不会用空格填充,全部存的时候空间节省了,而读的时候须要发送字符的数量全部读取会变慢
BINARY和VARBINARY类相似于CHAR和VARCHAR,不一样的是它们包含二进制字符串而不要二进制字符串
输入值的和char 与varchar差很少的填充效果
blob:没有编码的二进制大字符串.(了解便可)
text:具有编码的大字符串;
都有四种
规定这个里面输入内容是什么,你能够输入他的内容,也能够输入他的索引
enum与set区别,enum只能输一个,set能输入一个或多个,且用集合的形式输入
注意: mysql会自动将字符串后面的空格删掉 因此你的数据在存储前应该先把空格处理掉
year :格式YYYT
timestamp :格式YYYY-MM-DD HH:MM:SS (不用输入默认为数据插入时候的插入时间)
注意: