• 表设计

  1. 库名、表名、字段名必须使用小写字母,“_”分割,且名称长度不超过12个字符并且要做到见名知意。

  2. 建议使用InnoDB存储引擎。

  3. 存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。

  4. 建议使用UNSIGNED存储非负数值。

  5. 建议使用INT UNSIGNED存储IPV4

  6. 整形定义中不添加长度,比如使用INT,而不是INT(4)。

  7. 使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED。

  8. 不建议使用ENUM类型,使用TINYINT来代替。

  9. 尽可能不使用TEXT、BLOB类型。

  10. VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。

  11. VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存

  12. 表字符集选择UTF8。

  13. 使用VARBINARY存储变长字符串。

  14. 存储年使用YEAR类型,存储日期使用DATE类型,存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。

  15. 建议字段定义为NOT NULL。

  16. 将过大字段拆分到其他表中。

  17. 禁止在数据库中使用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 创建数据库知识总结的更多相关文章

  1. mysql创建数据库

    mysql创建数据库 创建utf8编码的数据库 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_ ...

  2. mysql创建数据库指定编码uft8

    mysql创建数据库指定编码uft8 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_gener ...

  3. MySQL 创建数据库

    MySQL 创建数据库 使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以 ...

  4. PHP MySQL 创建数据库

    PHP MySQL 创建数据库 数据库存有一个或多个表. 你需要 CREATE 权限来创建或删除 MySQL 数据库. 使用 MySQLi 和 PDO 创建 MySQL 数据库 CREATE DATA ...

  5. MYSQL创建数据库时候直接指定编码和排序规则

    安装我 在网上搜索的结果执行 代码: sudo gedit /etc/mysql/my.cnf 设置了默认编码为 UTF8 代码: [client]port            = 3306sock ...

  6. 五、MySQL 创建数据库

    MySQL 创建数据库 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程,数据名为 ...

  7. mysql创建数据库指定字符集和校对规则

    mysql创建数据库的语法格式: CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>] ...

  8. mysql创建数据库用户

    连接mysql cmd--> mysql -hlocalhost -uroot -pmypassword 退出mysql mysql> quit 也可用exit或者 \q ======== ...

  9. Python MySQL 创建数据库

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

随机推荐

  1. 【C++学习笔记】C++经典十二道笔试题!你能做出几道?

    1. 运行下面的C++代码,得到的结果是什么? #include "stdafx.h" #include<iostream> using namespace std; ...

  2. rabbitmq--通配符模式Topics

    topic模式也称为主题模式,其实他相对于routing模式最大的好处就是他多了一种匹配模式的路由,怎么理解匹配呢,其实就相当于我们之前正则的.*这种,不过他的匹配机制可能不是这种(其实除了匹配规则外 ...

  3. Linux命令的执行

    为什么在提示符下命令可以被执行呢? 执行命令过程 输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来 shell本身也是一个程序,只不过 ...

  4. HashMap的理解

    Hashmap的实现原理 默认它是存放了16个链表头的数组,存储数据的时候key先生成hashcode,根据hashcode把数据存放到相应链表中,那么是如何确定存放到哪个链表中的呢?采用hashco ...

  5. Html+Ajax+Webservice 实现文件跨域上传

    1. 界面HTML <p >上传文件: <input id="zfiles" type="file" name="file" ...

  6. 前端基础——HTML(一)

    HTML html超文本标记语言 前端三层 HTML结构层 css样式层 JavaScript行为层 其他多媒体内容(图片,音频等等) 互联网运行过程 客 --http请求--> 服 户 htt ...

  7. dubbo配置加载优先级

    优先级从高到低: JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口: XML 次之,如果在 XML 中有配置,则 dubbo.properties ...

  8. sentinel规则nacos持久化

    背景说明:生产环境中sentinel的使用应该是如下图所示: sentinel控制台编辑规则  推送到 nacos配置中心, 由nacos推送到应用,应用更新内存. 这样的话, 规则持久化在了naco ...

  9. 多线程之Callable

    多线程实现Callable的好处有三点 1.Callable支持泛型 2.Callable支持返回值 3.Callable可以抛出异常 class MyThread2 implements Calla ...

  10. 如何实现 axios 的自定义适配器 adapter

    Axios 是一个非常优秀的基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.并且提供了很多便捷的功能,例如: 支持 Promise API 拦截请求和响应 转换请求数据和 ...