mysql 创建数据库知识总结
表设计
库名、表名、字段名必须使用小写字母,“_”分割,且名称长度不超过12个字符并且要做到见名知意。
建议使用InnoDB存储引擎。
存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。
建议使用UNSIGNED存储非负数值。
建议使用INT UNSIGNED存储IPV4。
整形定义中不添加长度,比如使用INT,而不是INT(4)。
使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED。
不建议使用ENUM类型,使用TINYINT来代替。
尽可能不使用TEXT、BLOB类型。
VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。
VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。
表字符集选择UTF8。
使用VARBINARY存储变长字符串。
存储年使用YEAR类型,存储日期使用DATE类型,存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。
建议字段定义为NOT NULL。
将过大字段拆分到其他表中。
禁止在数据库中使用VARBINARY、BLOB存储图片、文件等。
---------------------------------------------------------------------------------完美分割线----------------------------------------------------------------------------------------------------
关于整形数据
① TINYINT: 无符号0~2^8-1 有符号 -2^7~2^7-1;
② SMALLINT: 无符号0~2^16-1 有符号 -2^15~2^15-1;
③ MEDIUMINT: 无符号0~2^24-1 有符号 -2^23~2^23-1;
④ INT:无符号0~2^32-1 有符号 -2^31~2^31-1; 最常用。
⑤ BIGINT :无符号0~2^64-1 有符号 -2^63~2^63-1;

发现很多公司数据库中很多整型数据限定了长度, 明显不是为了 "Zerofill/补零功能". 推测大家可能是搞错了"整型长度"的含义, 误以为"整型"后面的数字代表的是"允许存储的最大宽度", 比如, 误以为 int(1) 不能存储 10.
int(M) M指示最大显示宽度。最大有效显示宽度是255,显示宽度与存储大小或类型包含的值的范围无关。
int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。
参考
"高性能MySQL" 的说明
"高性能MySQL" 书中在"4.1 选择优化的数据类型"中提到:
MySQL 可以为整数类型指定宽度, 例如 INT(11), 对大多数应用这是没有意义的: 它不会限制值的合法范围, 只是规定了 MySQL 的一些交互工具(例如 MySQL 命令行客户端)用来显示字符的个数. 对于存储和计算来说, INT(1) 和 INT(20) 是相同的
"MySQL 手册"的说明
MySQL 5.7 手册 "12.2.5 Numeric Type Attributes":
MySQL 支持用括号包含的数字限定整型的显示长度. 比如 INT(4) 限定了整型的显示长度为 4 个字符, 对于小于 4 个字符的数字, 有些数据库软件会用"空格"来补齐小于 4 个位数的数字.
这个显示长度并不会限制该字段的数字存储范围, 同时, 也不会阻止大于指定显示长度的数字写入该字段. 比如, SMALLINT(3) 的字段和 SMALLINT 的数字存储范围都是 -32768 to 32767, 如果存储的数字超过 3 个位数仍然是允许被存入 SMALLINT(3) 字段, 而且以其本来的位数显示.
如果配合 ZEROFILL 属性, 将用 0 来补齐. 比如 INT(4) ZEROFILL 字段, 数字 5 会被存储为 0005.
---------------------------------------------------------------------------------完美分割线----------------------------------------------------------------------------------------------------
关于varchar
首先要确定mysql版本
4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节)
5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个
其实最好的办法是在自己数据库中建个表试试可以放多少汉字,现在mysql都5.0已上了,varchar(50)是可以存50个汉字的
CREATE TABLE varchar_test (
`id` int(11) NOT NULL ,
`string` varchar(10)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8COLLATE=utf8_general_ci insert into varchar_test VALUES (1, '一二三四五六七八九十');
insert into test02 VALUE (2, '一二三四五六七八九十一');
结果:
insert into varchar_test VALUE (1, '一二三四五六七八九十')
Affected rows: 1
时间: 0.041s insert into varchar_test VALUE (2, '一二三四五六七八九十一')
1406 - Data too long for column 'string' at row 1
时间: 0s
---------------------------------------------------------------------------------完美分割线----------------------------------------------------------------------------------------------------
mysql日期和时间类型
mysql有5种表示时间值的日期和时间类型,分别为、DATE,TIME,YEAR,DATETIME,TIMESTAMP。
TIMESTAMP类型有专有的自动更新特性,MYSQL5.7才可以default current_timestamp
mysql 创建数据库知识总结的更多相关文章
- mysql创建数据库
mysql创建数据库 创建utf8编码的数据库 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_ ...
- mysql创建数据库指定编码uft8
mysql创建数据库指定编码uft8 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_gener ...
- MySQL 创建数据库
MySQL 创建数据库 使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以 ...
- PHP MySQL 创建数据库
PHP MySQL 创建数据库 数据库存有一个或多个表. 你需要 CREATE 权限来创建或删除 MySQL 数据库. 使用 MySQLi 和 PDO 创建 MySQL 数据库 CREATE DATA ...
- MYSQL创建数据库时候直接指定编码和排序规则
安装我 在网上搜索的结果执行 代码: sudo gedit /etc/mysql/my.cnf 设置了默认编码为 UTF8 代码: [client]port = 3306sock ...
- 五、MySQL 创建数据库
MySQL 创建数据库 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程,数据名为 ...
- mysql创建数据库指定字符集和校对规则
mysql创建数据库的语法格式: CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>] ...
- mysql创建数据库用户
连接mysql cmd--> mysql -hlocalhost -uroot -pmypassword 退出mysql mysql> quit 也可用exit或者 \q ======== ...
- Python MySQL 创建数据库
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
随机推荐
- es 迁移数据, 重建索引
原索引 PUT my_index { "mappings": { "_doc": { "properties": { "creat ...
- 如何获取前端提交来得json格式数据
composer.json { "require": { "guzzlehttp/guzzle": "~6.0" } } composer ...
- 在VMware虚拟机Ubuntu使用traceroute
Linux traceroute命令用于显示数据包到主机间的路径 traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置. Ubuntu命令行输入: 后面 ...
- C#语言下使用gRPC、protobuf(Google Protocol Buffers)实现文件传输
初识gRPC还是一位做JAVA的同事在项目中用到了它,为了C#的客户端程序和java的服务器程序进行通信和数据交换,当时还是对方编译成C#,我直接调用. 后来,自己下来做了C#版本gRPC编写,搜了很 ...
- 数据恢复软件推荐-easyrecovery绿色破解版(附注册码)免费下载
easyrecovery破解版专注于PC端存储数据的抢救恢复,软件的整体界面风格和360杀毒有些许相似,没有看起来像牛皮藓的杂乱广告,只有六个功能按键,对应你所遇到的数据丢失状况级别,点击最为适合的功 ...
- localStorage.getItem得到的是[object Object] 的解决方案
设计背景: 购物车要实现本地存储,避免刷新页面数据丢失 实现方案: 1,本地储存,进入页面获取本地数据,在进行数据操作 2,每操作一次数据就将数据传给后台进行保存,(操作数据多,用户量大对服务器造成压 ...
- vue组件使用name属性来生成递归组件
先来个简单的数据 1 lists = [{ 2 id: 1, 3 title: '第一层', 4 children: [{ 5 id: 3, 6 title: '第二层', 7 children: [ ...
- OLTP与OLAP的介绍(理论知识)
OLTP与OLAP的介绍 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing).联机分析处理OLAP(On-Line Analytical ...
- 常用物联网应用层协议(1)——先说HTTP协议
概念 简介 HTTP是一个属于应用层的面向对象的协议,目前使用最为广泛的是HTTP1.1协议.当然,许多网站已经开始支持HTTP2.0,HTTP2复杂度高于HTTP1.1,我们先从HTTP1.1说起. ...
- 【应用服务 App Service】App Service使用Git部署时,遇见500错误
问题描述 Azure App Service在部署的时候支持多种方式,如Zip,VS 2019, VS Code,或者是Git部署,当使用Git部署遇见500错误时,可以通过其他的部署方式来验证是否也 ...
