本文将为您提供关于mysql货币使用什么字段类型?的详细介绍,我们还将为您解释mysql货币使用什么字段类型的的相关知识,同时,我们还将为您提供关于mysqlenum字段类型的谨慎使用、mysql–适
本文将为您提供关于mysql货币使用什么字段类型?的详细介绍,我们还将为您解释mysql货币使用什么字段类型的的相关知识,同时,我们还将为您提供关于mysql enum字段类型的谨慎使用、mysql – 适用于真/假值的数据字段类型?、mysql 中修改表字段名 / 字段长度 / 字段类型详解、MySQL 基本字段类型的实用信息。
本文目录一览:- mysql货币使用什么字段类型?(mysql货币使用什么字段类型的)
- mysql enum字段类型的谨慎使用
- mysql – 适用于真/假值的数据字段类型?
- mysql 中修改表字段名 / 字段长度 / 字段类型详解
- MySQL 基本字段类型
mysql货币使用什么字段类型?(mysql货币使用什么字段类型的)
在MysqL中,货币常使用Decimal和Numric类型的字段表示,这两种类型被MysqL实现为同样的类型;它们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。
开发中,货币在数据库中MysqL常用Decimal和Numric类型表示,这两种类型被MysqL实现为同样的类型。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定;例如:
salary DECIMAL(9,2)
在这个例子中,9(precision)代表将被用于存储值的总的小数位数,而2(scale)代表将被用于存储小数点后的位数。因此,在这种情况下,能被存储在salary列中的值的范围是从-9999999.99到9999999.99。
DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度。一个字符用于值的每一位、小数点(如果scale>0)和“-”符号(对于负值)。如果scale是0,DECIMAL和NUMERIC值不包含小数点或小数部分。
不使用float或者double的原因:因为float和double是以二进制存储的,所以有一定的误差。
比如:在数据库中c1,c2,c3分别存储类型是float(10.2),decimal(10.2),float类型。
插入数据:
INTO test (c1,c2,c3) VALUES (1234567.23,1234567.23,1234567.23)
数据在数据库中的存储结果是:
可以看出,使用float类型存储有一定的误差。因此使用decimal或者numric类型。
推荐教程:mysql视频教程
mysql enum字段类型的谨慎使用
为什么使用枚举
限定值的取值范围,比如性别(男,女,未知)等。
枚举类型使用陷阱
1.超级不推荐在mysql中设置某一字段类型为enum,但是存的值为数字,比如‘0’,‘1’,‘2’;
- 解释1:你会混淆,因为enum可以通过角标取值,但它的角标是从1开始,对于不熟悉这个字段的人这里会出错
- 解释2:enum类型的字段对于0与‘0’有非常大的区别,如果你是用0当角标做操作,因它没有这个角标,所要会报错;如果你使用‘0’这个值去取枚举值,并做插入操作,你会发现它竟然会成功,但是插入的结果是一个“空”(不是null)
- 解释3:enum类型对于php等弱语言类型的支持很差,弱语言类型打引号和不打引号的值可能是同一类型,但是对于mysql中enum类型的字段来说,那就不一定是一回事了
结论:总之,不要拿mysql的enum类型取存一些数字;如果你一定要使用这个字段去存数字,请把这个字段定义为int,然后在java代码中使用枚举类做一个对于这个字段值范围的一个限定!(后面有代码)
2.你可能会报这个错——Caused by: java.sql.SQLException: Data truncated for column ''Color'' at row 1 ;
- 原因:Jpa默认使用整数顺序值持久化枚举类型;
- Mysql中枚举类型Color定义取值的顺序是RED、GREEN、BLUE,因此,当这三个取值持久化到数据库表时,取值分别是0、1、2;
- 意思就是我们这里存往数据库的数据是0、1、2这样的数字,而不是RED、GREEN、BLUE字符串, 但是Mysql数据库中定义的是RED、GREEN、BLUE,并没有其它值所以报错
解决:在entity中使用@Enumerated(EnumType.STRING)标注你的枚举类型属性,如果标注,默认是integer
使用例子:
建表语句为
CREATE TABLE test4 ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, brand VARCHAR(255) NOT NULL, color ENUM(''RED'',''GREEN'',''BLUE'') ) ENGINE = InnoDB;
Java代码中,枚举类
public enum Color { RED, GREEN, BLUE }
Java代码中,Javabean
@Entity @Table(name="test4") public class ClothesRight { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Enumerated(EnumType.STRING) private Color color; private String brand; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public ClothesRight(Long id, Color color, String brand) { super(); this.id = id; this.color = color; this.brand = brand; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public ClothesRight() { super(); } }
简单使用:
public interface Test4RightRepository extends JpaRepository<ClothesRight, Long>{ }
@Autowired private Test4RightRepository t4R; /** * 使用@Enumrated()标注字段为枚举的数据 * 结果 正确插入RED */ @GetMapping(value="/addclothesright") public void GetTest4Right(){ List<ClothesRight> entities = new ArrayList<>(); ClothesRight clothes = new ClothesRight(); //clothes.setId(1L); clothes.setBrand("佐丹奴"); clothes.setColor(Color.RED); entities.add(clothes); t4R.save(entities); }
结果为:
插入数字例子:
建表
CREATE TABLE test5num ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, used int(11) DEFAULT NULL COMMENT ''0:没用过 1:已用过 2:不能用'' )ENGINE = InnoDB;
Java代码为:
@Entity @Table(name="test5num") public class Test5Num { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private Used used; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Used getUsed() { return used; } public void setUsed(Used used) { this.used = used; } public Test5Num() { super(); } public Test5Num(Long id, Used used) { super(); this.id = id; this.used = used; } }
/** *枚举类 */ public enum Used { UNUSED(0,"没用过"), USED(1,"已用过"), FORBIDDEN(2,"不能用"); private Integer code; private String discribe; public Integer getCode() { return code; } public String getDiscribe() { return discribe; } private Used(Integer code, String discribe) { this.code = code; this.discribe = discribe; } }
/** * dao层 */ public interface Test5NumRepository extends JpaRepository<Test5Num, Long>{ }
@Autowired private Test5NumRepository t5N; /** * mysql枚举的字段类型不宜插入数字,但是需求就是要用数字,怎么办? * 解决:mysql数据类型定义为int,枚举限定在java代码中解决 * */ @GetMapping("/test5insert") public void insertT5(){ Test5Num t5 = new Test5Num(); t5.setUsed(Used.USED); List<Test5Num> list = new ArrayList<Test5Num>(); list.add(t5); t5N.save(list); }
结果:
到此这篇关于mysql enum字段类型的谨慎使用的文章就介绍到这了,更多相关mysql enum字段类型内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
- MySQL数据类型enum 枚举类型
- 实例测试MySQL的enum类型
- 要慎用mysql的enum字段的原因
- mysql之set与enum的介绍
mysql – 适用于真/假值的数据字段类型?
在MysqL数据库中存储true / false / 1/0值的最合适(读取最少数据)数据字段是什么?
我以前使用过一个字符长的tinyint,但我不确定它是否是最好的解决方案?
谢谢!
tinyint(1)
基本上是从BOOL数据类型别名,所以它很好.
See here
此外,这里已经介绍过:
Which MySQL data type to use for storing boolean values
mysql 中修改表字段名 / 字段长度 / 字段类型详解
在 mysql 中我们对数据表字段的修改命令只要使用 alter 就可以了,下面我来给大家详细介绍 mysql 中修改表字段名 / 字段长度 / 字段类型等等一些方法介绍,有需要了解的朋友可参考。
先来看看常用的方法
MySql 的简单语法,常用,却不容易记住。当然,这些 Sql 语法在各数据库中基本通用。下面列出:
1. 增加一个字段
alter table user add COLUMN new1 VARCHAR (20) DEFAULT NULL; // 增加一个字段,默认为空
alter table user add COLUMN new2 VARCHAR (20) NOT NULL; // 增加一个字段,默认不能为空
2. 删除一个字段
alter table user DROP COLUMN new2; // 删除一个字段
3. 修改一个字段
alter table user MODIFY new1 VARCHAR (10); // 修改一个字段的类型
alter table user CHANGE new1 new4 int; // 修改一个字段的名称,此时一定要重新
// 主键
alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
// 增加一个新列
alter table t2 add d timestamp;
alter table infos add ex tinyint not null default ‘0′;
// 删除列
alter table t2 drop column c;
// 重命名列
alter table t1 change a b integer;
// 改变列的类型
alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default ‘0′;
// 重命名表
alter table t1 rename t2;
加索引
mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名 1 [,字段名 2 …]);
mysql> alter table tablename add index emp_name (name);
加主关键字的索引
mysql> alter table tablename add primary key(id);
加唯一限制条件的索引
mysql> alter table tablename add unique emp_name2(cardnumber);
删除某个索引
mysql>alter table tablename drop index emp_name;
增加字段:
mysql> ALTER TABLE table_name ADD field_name field_type;
修改原字段名称及类型:
mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
删除字段:
mysql> ALTER TABLE table_name DROP field_name;
mysql 修改字段长度
alter table 表名 modify column 字段名 类型;
例如
数据库中 user 表 name 字段是 varchar (30)
可以用
alter table user modify column name varchar(50) ;
MySQL 基本字段类型
Mysql基础1-基础语法-字段类型
主要:
- 基础
- 字段类型
基础
基本概念
1) 数据库分类
层次数据库,网状数据库,关系数据库
常见:SQL Server, Oracle,infomix,sybase,ibmDB2,Mysql
2)数据库存储的本质和表现:
存储本质: 将 数据值 通过数据管理系统进行有序的存储
存储表现:
每个数据库对应一个文件夹
每个数据表对应一个或多个文件
3)mysql数据库的各层次关系:
1个数据库系统包含有多个数据库
1个数据库可以有多张数据表
一个数据表可以有多个字段(数据项)和多行数据(记录)
4)基本概念
sql :是关系数据库的 语言标准。 Struct Query Language 结构化查询语言
数据库database: 存储各种数据data
数据库管理系统dbms: Database Management system
数据表table,字段field,列column,行row,记录record
数据库操作的基本模式(流程)

mysql系统级操作
安装与配置 【略】
启动与停止mysql数据库服务
命令模式【管理员】: -- 非管理员才做可能发生 提示 “发生系统错误 5”
启动:net start mysql
停止:net stop mysql
服务模式:通过服务来启动或停止 控制面板》管理工具》服务》mysql 启动/停止
登录与退出:
首先设置mysql环境变量

登录:
形式1: mysql -h 服务器地址 -u 用户名 -p -P 端口号
形式2: mysql --host=服务器地址 --user=登录名 --port=端口号 --password
默认端口: 3306
退出:
exit 或 quit

备份与恢复数据
通常是用于数据库的“迁移”:将某台数据库服务器中的某个库,“搬迁”到另一个数据库服务器中去
也常用于数据的“安全备份”:就是数据库实际运行中,防止数据库系统崩溃,防止数据库被黑客入侵

基础语法
1) 注释:

2)语句行
结束符: 分号(默认)
修改结束符: delimiter 结束符 如: delimiter //
3)大小写
不区分大小写
但对于区分大小写的系统中,生成文件或文件夹的操作是区分大小写的 如: 创建库,表会生成对应目录和文件
文件或目录在Linux,Unix中严格区分大小写。 windows中不区分大小写
4) 命名规则
字母和下划线,不用数字开头。
如果是非常规字符,要使用反引号
数据库名,表名,视图名,字段名,函数名,过程名通常使用小写,并使用下划线分割法
字段类型
1) 形式:
字段名 类型名 [(M)] [unsigned] [zerofill]
M:显示长度 与zerofil结合使用 不够长度左侧自动补0
设置zerofill, 则表示该字段同时具备unsigned。
2) 主要分3类
数值型,字符型,时间型
数值型
1) 整数型:
类型 所占字节数
tinyint 1字节
smallint 2字节
mediumint 3字节
int 4字节
bigint 8字节

2) 小数型
单精度浮点型float: (单精度 4个字节,精度6~7位有效数字)
双精度double: (双精度 8个字节,约20个有效数字,别名:real)
定点型: decimal (别名: dec numeric fixed, 整数最大65位,小数最多30位)
如果整数部分超过最大设定的位数,则会自动设置为最大值。 如 decimal(5,2), 插入数据1234.11 则结果为 999.99
decimal(总的位数,小数位数)

字符型
字符型要使用引号引起来
vachar类型:
概念: 变长字符串,使用时必须设定其长度。
最大长度: 理论最大65535个字符,实际最大只能是65533个字符
原因: 一个表格的一行 的数据存储最大容量限制: 65535
编码不同则最大长度也不同:
存储中文 gbk: 最大长度是 65533/2 个
存储中文 utf8: 最大长度是 65533/3 个
实际存储: 存储长度由存储内容决定,设置值为最多可存储的字符个数
char类型
概念: 定长字符串 , 使用时一般需要设置其长度。 不设置长度,则默认是1.
最大长度: 255个
实际存储: 如果少于设定长度, 会以空格填满
适用于: 存储的数据长度是固定长度的字符。 如: 邮编, 手机号码等
enum 类型
概念: (枚举)单选项字符串数据类型, 使用时,需要给定 固定的几个选项。 存储的时候,只存储其中一个值
形式: enum("选项1", "选项2",....)
实际存储: 字符串选项值对应数字: 1,2,3,4,5,.. 最多65535个选项
写入数据形式: 可以是该选项字符串本身,也可以用对应的数字
适用于: 存储表单界面中的 “单选项值”
set 类型
概念: 多选项字符串数据类型, 使用时,需要给定 固定的几个选项。 存储的时候,存储其中若干个值
形式: set("选项1", "选项2",....)
实际存储: 字符串选项值对应数字 1,2,4,8,16... 最多64个选项
写入数据形式: 可以用选项字符串并用逗号隔开, 也可以使用对应的“数字的和”
适用于: 存储表单界面中的 “多选项值”

text 类型
概念: 长文本字符类型。其中存储的数据不占表格中的数据容量限制
其他同类型: smalltext tinytext longtext
其他类型
binary类型: 定长二进制字符串类型。 存储二进制值
varbinary 类型: 变长二进制字符串类型。存储二进制值
blob 类型:二进制数据类型。 存储二进制值。 适用于存储图片,视频,其他文件等。
时间型
时间类型: 要用引号引起来
1) datetime 类型: 时间日期类型
2) date类型: 日期类型
3) time 类型:时间类型
4) year 类型:年份类型
5) timestamp 类型: 时间戳类型。 是一个数字。 不需要手动插入数据,系统自动填入
js中获取事件戳: gettime() ; 单位是毫秒
php中获取时间戳: time(); 单位是秒
mysql中: 自动获得时间戳的数据值,既 now()

其他类型
1) 位类型 bit
使用形式: bit[(M)] 其中M是1-64的数字。 表示使用多少二进制数字来存储数据
插入形式: b ''value'' 如 b ''101''
2) 序列类型 serial
实质是 bigint unsigned not null auto_increment unique 的一个别名
3) 布尔类型 bool
实质是 tinyint(1) 的一个同义词。 其值为0表示false, 否则表示true
今天关于mysql货币使用什么字段类型?和mysql货币使用什么字段类型的的介绍到此结束,谢谢您的阅读,有关mysql enum字段类型的谨慎使用、mysql – 适用于真/假值的数据字段类型?、mysql 中修改表字段名 / 字段长度 / 字段类型详解、MySQL 基本字段类型等更多相关知识的信息可以在本站进行查询。
本文标签: