mysql怎么获取子元素 mysql获取某字符

mysql分页技术 中用到的关键字

mysql的limit是可以指定位置开始,然后还可以指定去多少调记录的。

创新互联建站主要从事成都网站建设、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务安定,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

select * from users limit 1,10就是从第一条,取10条。

select * from users limit 10,10就是从第十条,取10条。

怎么取都行。你看看。

通过generator写的mybatis怎么获取新增是的id

在MBG中,最主要也最重要的就是XML配置文件,因此本篇文章主要的内容就是XML配置。

这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照。

1. 配置文件头

?xml version="1.0" encoding="UTF-8"?

!DOCTYPE generatorConfiguration

PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"

""

使用最新版的MBG需要使用上面的xml头,配置文件必须包含上面的DOCTYPE。

2. 根节点generatorConfiguration

generatorConfiguration节点没有任何属性,直接写节点即可,如下:

generatorConfiguration

!-- 具体配置内容 --

/generatorConfiguration

3. generatorConfiguration子元素

从这段开始,就是配置的主要内容,这些配置都是generatorConfiguration元素的子元素。

包含以下子元素(有严格的顺序):

properties (0个或1个)

classPathEntry (0个或多个)

context (1个或多个)

3.1 properties 元素

这个元素用来指定外部的属性元素,不是必须的元素。

元素用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ${property}这种形式的引用,通过这种方式引用属性文件中的属性值。 对于后面需要配置的**jdbc信息**和targetProject属性会很有用。

这个属性可以通过resource或者url来指定属性文件的位置,这两个属性只能使用其中一个来指定,同时出现会报错。

resource:指定**classpath**下的属性文件,使用类似com/myproject/generatorConfig.properties这样的属性值。

url:可以指定文件系统上的特定位置,例如

3.2 classPathEntry 元素

这个元素可以0或多个,不受限制。

这个元素的作用是将MBG运行时需要用到的jar包(或zip格式)添加到**classpath**下。

最常见的用法是,当**classpath**下面**没有**JDBC驱动的时候,我们通常通过这个属性指定驱动的路径,例如:

classPathEntry location="E:\mysql\mysql-connector-java-5.1.29.jar"/

如果需要用到其他的jar包,也可以这么配置,例如如果你开发了一个MBG的插件,你就可以通过这种方式加入到**classpath**

这里注意上面重点强调的 没有,一般在项目中使用的时候,**classpath**下面都有JDBC驱动,因此从项目中启动的时候不需要配置该项。

建议:由于该参数使用了绝对路径,因此不利用在不同电脑上通用,因此建议最好把需要的jar包放到项目的**classpath**下,避免每个人都得单独配置路径。

3.3 context 元素

在MBG的配置中,至少需要有一个context元素。

context元素用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行MBG的时候还可以指定要运行的context。

该元素只有一个**必选属性**id,用来唯一确定一个context元素,该id属性可以在运行MBG的使用。

此外还有几个**可选属性**:

defaultModelType:**这个属性很重要**,这个属性定义了MBG如何生成**实体类**。

这个属性有以下可选值:

conditional:*这是默认值*,这个模型和下面的hierarchical类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。

flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。**这种模型最简单,推荐使用。**

hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。

targetRuntime:此属性用于指定生成的代码的运行时环境。该属性支持以下可选值:

MyBatis3:*这是默认值*

MyBatis3Simple

Ibatis2Java2

Ibatis2Java5 一般情况下使用默认值即可,有关这些值的具体作用以及区别请查看中文文档的详细内容。

introspectedColumnImpl:该参数可以指定扩展org.mybatis.generator.api.IntrospectedColumn该类的实现类。该属性的作用可以查看扩展MyBatis Generator。

一般情况下,我们使用如下的配置即可:

context id="Mysql" defaultModelType="flat"

如果你希望不生成和Example查询有关的内容,那么可以按照如下进行配置:

context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"

使用MyBatis3Simple可以避免在后面的table中逐个进行配置(后面会提到)。

MBG配置中的其他几个元素,基本上都是context的子元素,这些子元素(有严格的配置顺序)包括:

property (0个或多个)

plugin (0个或多个)

commentGenerator (0个或1个)

jdbcConnection (1个)

javaTypeResolver (0个或1个)

javaModelGenerator (1个)

sqlMapGenerator (0个或1个)

javaClientGenerator (0个或1个)

table (1个或多个)

其中property属性比较特殊,后面讲解的时候都会和父元素一起进行讲解。在讲解property属性前,我们先看看**什么是分隔符?**。

这里通过一个例子说明。假设在Mysql数据库中有一个表名为user info,你没有看错,中间是一个空格,这种情况下如果写出select * from user info这样的语句,肯定是要报错的,在Mysql中的时候我们一般会写成如下的样子:

select * from `user info`

这里的使用的**反单引号(`)**就是**分隔符**,**分隔符**可以用于**表名**或者**列名**。

下面继续看property支持的属性:

autoDelimitKeywords

beginningDelimiter

endingDelimiter

javaFileEncoding

javaFormatter

xmlFormatter

由于这些属性比较重要,这里一一讲解。

首先是autoDelimitKeywords,当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符**。

然后这里继续上面的例子来讲beginningDelimiter和endingDelimiter属性。

由于beginningDelimiter和endingDelimiter的默认值为双引号("),在Mysql中不能这么写,所以还要将这两个默认值改为**反单引号(`)**,配置如下:

property name="beginningDelimiter" value="`"/

property name="endingDelimiter" value="`"/

属性javaFileEncoding设置要使用的Java文件的编码,默认使用当前平台的编码,只有当生产的编码需要特殊指定时才需要使用,一般用不到。

最后两个javaFormatter和xmlFormatter属性**可能会**很有用,如果你想使用模板来定制生成的java文件和xml文件的样式,你可以通过指定这两个属性的值来实现。

接下来分节对其他的子元素逐个进行介绍。

3.3.1 plugin 元素

该元素可以配置0个或者多个,不受限制。

plugin元素用来定义一个插件。插件用于扩展或修改通过MyBatis Generator (MBG)代码生成器生成的代码。

插件将按在配置中配置的顺序执行。

有关插件的详细信息可以参考开发插件和提供的插件了解更多。

3.3.2 commentGenerator 元素

该元素最多可以配置1个。

这个元素非常有用,相信很多人都有过这样的需求,就是希望MBG生成的代码中可以包含**注释信息**,具体就是生成表或字段的备注信息。

使用这个元素就能很简单的实现我们想要的功能。这里先介绍该元素,介绍完后会举例如何扩展实现该功能。

该元素有一个可选属性type,可以指定用户的实现类,该类需要实现org.mybatis.generator.api.CommentGenerator接口。而且必有一个默认的构造方法。这个属性接收默认的特殊值DEFAULT,会使用默认的实现类org.mybatis.generator.internal.DefaultCommentGenerator。

默认的实现类中提供了两个可选属性,需要通过property属性进行配置。

suppressAllComments:**阻止**生成注释,默认为false

suppressDate:**阻止**生成的注释包含时间戳,默认为false

一般情况下由于MBG生成的注释信息没有任何价值,而且有时间戳的情况下每次生成的注释都不一样,使用**版本控制**的时候每次都会提交,因而一般情况下我们都会屏蔽注释信息,可以如下配置:

commentGenerator

property name="suppressAllComments" value="true"/

property name="suppressDate" value="true"/

/commentGenerator

接下来我们简单举例实现生成包含表字段注释信息的注释

因为系统提供了一个默认的实现类,所以对我们来说,自己实现一个会很容易,最简单的方法就是复制默认实现类代码到一个新的文件中,修改类名如MyCommentGenerator,在你自己的实现类中,你可以选择是否继续支持上面的两个属性,你还可以增加对其他属性的支持。

我们通过下面一个方法的修改来了解,其他几个方法请自行修改(写本章的时候我也没有完全实现该类,所以不提供完整源码了):

@Override

public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {

if (introspectedColumn.getRemarks() != null !introspectedColumn.getRemarks().equals("")) {

field.addJavaDocLine("/**");

field.addJavaDocLine(" * " + introspectedColumn.getRemarks());

addJavadocTag(field, false);

field.addJavaDocLine(" */");

}

}

这个方法是给字段添加注释信息的,其中IntrospectedColumn包含了字段的完整信息,通过getRemarks方法可以获取字段的注释信息。上面这个方法修改起来还是很容易的。除了字段的注释外还有Getter和Setter,以及类的注释。此外还有生成XML的注释,大家可以根据默认的实现进行修改。

完成我们自己的实现类后,我们还需要做如下配置:

commentGenerator type="com.github.abel533.mybatis.generator.MyCommentGenerator"/

3.3.3 jdbcConnection 元素

jdbcConnection用于指定数据库连接信息,该元素必选,并且只能有一个。

配置该元素只需要注意如果JDBC驱动不在**classpath**下,就需要通过classPathEntry元素引入jar包,这里**推荐**将jar包放到**classpath**下。

该元素有两个必选属性:

driverClass:访问数据库的JDBC驱动程序的完全限定类名

connectionURL:访问数据库的JDBC连接URL

该元素还有两个可选属性:

userId:访问数据库的用户ID

password:访问数据库的密码

此外该元素还可以接受多个property子元素,这里配置的property属性都会添加到JDBC驱动的属性中。

这个元素配置起来最容易,这里举个简单例子:

jdbcConnection driverClass="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://localhost:3306/test"

userId="root"

password=""

/jdbcConnection

3.3.4 javaTypeResolver 元素

该元素最多可以配置一个。

这个元素的配置用来指定JDBC类型和Java类型如何转换。

该元素提供了一个可选的属性type,和commentGenerator比较类型,提供了默认的实现DEFAULT,一般情况下使用默认即可,需要特殊处理的情况可以通过其他元素配置来解决,不建议修改该属性。

该属性还有一个可以配置的property元素。

可以配置的属性为forceBigDecimals,该属性可以控制是否强制DECIMAL和NUMERIC类型的字段转换为Java类型的java.math.BigDecimal,默认值为false,一般不需要配置。

默认情况下的转换规则为:

如果精度0或者长度18,就会使用java.math.BigDecimal

如果精度=0并且10=长度=18,就会使用java.lang.Long

如果精度=0并且5=长度=9,就会使用java.lang.Integer

如果精度=0并且长度5,就会使用java.lang.Short

如果设置为true,那么一定会使用java.math.BigDecimal,配置示例如下:

javaTypeResolver

property name="forceBigDecimals" value="true" /

/javaTypeResolver

3.3.5 javaModelGenerator 元素

该元素必须配置一个,并且最多一个。

该元素用来控制生成的实体类,根据context中配置的defaultModelType,一个表可能会对应生成多个不同的实体类。一个表对应多个类实际上并不方便,所以前面也推荐使用flat,这种情况下一个表对应一个实体类。

该元素只有两个属性,都是必选的。

targetPackage:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(table中会提到)。

targetProject:指定目标项目路径,使用的是文件系统的绝对路径。

该元素支持以下几个property子元素属性:

constructorBased:该属性只对MyBatis3有效,如果true就会使用构造方法入参,如果false就会使用setter方式。默认为false。

enableSubPackages:如果true,MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性。默认为false。

immutable:该属性用来配置实体类属性是否可变,如果设置为true,那么constructorBased不管设置成什么,都会使用构造方法入参,并且不会生成setter方法。如果为false,实体类属性就可以改变。默认为false。

rootClass:设置所有实体类的基类。如果设置,需要使用类的全限定名称。并且如果MBG能够加载rootClass,那么MBG不会覆盖和父类中完全匹配的属性。匹配规则:

属性名完全相同

属性类型相同

属性有getter方法

属性有setter方法

trimStrings:是否对数据库查询结果进行trim操作,如果设置为true就会生成类似这样public void setUsername(String username) {this.username = username == null ? null : username.trim();}的setter方法。默认值为false。

配置示例如下:

javaModelGenerator targetPackage="test.model" targetProject="E:\MyProject\src\main\java"

property name="enableSubPackages" value="true" /

property name="trimStrings" value="true" /

/javaModelGenerator

3.3.6 sqlMapGenerator 元素

该元素可选,最多配置一个。但是有如下两种必选的特殊情况:

如果targetRuntime目标是**iBATIS2**,该元素必须配置一个。

如果targetRuntime目标是**MyBatis3**,只有当javaClientGenerator需要XML时,该元素必须配置一个。 如果没有配置javaClientGenerator,则使用以下的规则:

如果指定了一个sqlMapGenerator,那么MBG将只生成XML的SQL映射文件和实体类。

如果没有指定sqlMapGenerator,那么MBG将只生成实体类。

该元素只有两个属性(和前面提过的javaModelGenerator的属性含义一样),都是必选的。

targetPackage:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(table中会提到)。

targetProject:指定目标项目路径,使用的是文件系统的绝对路径。

该元素支持property子元素,只有一个可以配置的属性:

enableSubPackages:如果true,MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性。默认为false。

配置示例:

sqlMapGenerator targetPackage="test.xml" targetProject="E:\MyProject\src\main\resources"

property name="enableSubPackages" value="true" /

/sqlMapGenerator

3.3.7 javaClientGenerator 元素

该元素可选,最多配置一个。

如果不配置该元素,就不会生成Mapper接口。

该元素有3个必选属性:

type:该属性用于选择一个预定义的客户端代码(可以理解为Mapper接口)生成器,用户可以自定义实现,需要继承org.mybatis.generator.codegen.AbstractJavaClientGenerator类,必选有一个默认的构造方法。 该属性提供了以下预定的代码生成器,首先根据context的targetRuntime分成三类:

MyBatis3:

ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件

MIXEDMAPPER:XML和注解的混合形式,(上面这种情况中的)SqlProvider注解方法会被XML替代。

XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。

MyBatis3Simple:

ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件

XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。

Ibatis2Java2或**Ibatis2Java5**:

IBATIS:生成的对象符合iBATIS的DAO框架(不建议使用)。

GENERIC-CI:生成的对象将只依赖于SqlMapClient,通过构造方法注入。

GENERIC-SI:生成的对象将只依赖于SqlMapClient,通过setter方法注入。

SPRING:生成的对象符合Spring的DAO接口

targetPackage:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(table中会提到)。

targetProject:指定目标项目路径,使用的是文件系统的绝对路径。

该元素还有一个可选属性:

implementationPackage:如果指定了该属性,实现类就会生成在这个包中。

该元素支持property子元素设置的属性:

enableSubPackages

exampleMethodVisibility

methodNameCalculator

rootInterface

useLegacyBuilder

这几个属性不太常用,具体作用请看完整的文档,这里对rootInterface做个简单介绍。

rootInterface用于指定一个所有生成的接口都继承的父接口。 这个值可以通过table配置的rootInterface属性覆盖。

这个属性对于通用Mapper来说,可以让生成的所有接口都继承该接口。

mysql里面的ENUM函数

根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。

用户在rule.xml中配置枚举值文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举值文件加载到内存中,形成一个映射表

在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来,直接查映射表得到分片编号

与MyCat的类似分片算法对比

中间件

DBLE

MyCat

分片算法种类    enum 分区算法    分片枚举  

两种中间件的枚举分片算法使用上无差别。

开发注意点

【分片索引】1. 整型数字(可以为负数)或字符串((不含=和换行符)

【分片索引】2. 枚举值之间不能重复

Male=0Male=1

或者

123=1123=2

会导致分片策略加载出错

【分片索引】3. 不同枚举值可以映射到同一个分片上

Mr=0Mrs=1Miss=1Ms=1123=0

运维注意点

【扩容】1. 增加枚举值无需数据再平衡

【扩容】2. 增加一个枚举值的分片数量数时,需要对局部数据进行迁移

【缩容】1. 减少枚举值需要数据再平衡

【缩容】2. 减少一个枚举值的分片数量数时,需要对局部数据进行迁移

配置注意点

【配置项】1. 在 rule.xml 中,可配置项为 property name="defaultNode" 、property name="mapFile" 和 property name="type"

【配置项】2. 在 rule.xml 中配置 property name="defaultNode" 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会报错;若需要配置,必须为非负整数,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会路由至这个值的 MySQL 分片

【配置项】3. 在 rule.xml 中配置 property name="mapFile" 标签,范围映射文件的路径:若在映射文件在 DBLE_HOME/conf 或其中,则可以使用相对路径的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 时,配置值就可以简写为 map/table_map.txt;映射文件在 DBLE_HOME/conf 目录以外时,需要使用绝对路径,但这种做法需要考虑用户权限等问题,因此不建议把映射文件放在 DBLE_HOME/conf 外。

【配置项】4. 编辑 mapFile 所配置的文件

记录格式为:枚举值=分片编号

枚举值可以是整型数字,或任意字符(除了=和换行符),分片编号必须是非负整型数字,记录之间以换行分隔,一行仅能有一条记录,枚举值不能够是“DEFAULT_NODE”这个字符串,允许以“//”和“#”在行首来注释该行

【配置项】5. 在 rule.xml 中配置 property name="type" 标签;type 必须为整型;取值为 0 时,mapFile 的枚举值必须为整型;取值为非 0 时,mapFile 的枚举值可以是任意字符(除了=和换行符)

mysql 数据类型的详解

MySQL数据库的表是一个二维表,由一个或多个数据列构成。

每个数据列都有它的特定类型,该类型决定了MySQL如何看待该列数据,我们可以把整型数值存放到字符类型的列中,MySQL则会把它看成字符串来处理。

MySQL中的列类型有三种:数值类、字符串类和日期/时间类。

从大类来看列类型和数值类型一样,都是只有三种。但每种列类型都还可细分。

下面对各种列类型进行详细介绍。

数值类的数据列类型

数值型的列类型包括整型和浮点型两大类。

TINYINT:1字节 非常小的正整数,带符号:-128~127,不带符号:0~255

SMALLINT:2字节 小整数,带符号:-32768~32767,不带符号:0~65535

MEDIUMINT:3字节 中等大小的整数,带符号:-8388608~8388607,不带符号:0~16777215

INT:4字节 标准整数,带符号:-2147483648~2147483647,不带符号:0~4294967295

BIGINT:8字节 大整数,带符号:-9223372036854775808~9233372036854775807,不带符号:0~18446744073709551615

FLOAT:4字节 单精度浮点数,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38

DOUBLE:8字节 双精度浮点数,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308

DECIMAL:M+2字节 以字符串形式表示的浮点数,它的取值范围可变,由M和D的值决定。

MYSQL支持大量的列类型,它们可以被分为 3 类:数字类型、日期和时间类型以及字符串(字符)类型。这个章节首先给出可用类型的概述,并且总结各类型所需的存储需求,然后提供各类型中的类型范畴更详细的描述。概述有意地简化了。更详细的说明应该参考特写列类型的附加信息,例如你能为其指定值的允许格式。

MySQL 支持的列类型在下面列出。下列代码字母用于描述中:

M指出最大的显示尺寸。最大的显示尺寸长度为 255。D适用于浮点类型。指出跟随在十进制小数点后的数字数量。最大可能值为 30,但不应大于M-2。

方括号 (“[”and“]”) 指定可选的类型修饰部份。

注意,如果为一个列指定了ZEROFILL,MySQL 将自动为这个列添加UNSIGNED属性。

警告:你应该知道当在两个整数类型值中使用减法时,如有一个为UNSIGNED类型,那么结果也是无符号的。查看章节6.3.5 Cast 函数。

TINYINT[(M)] [UNSIGNED] [ZEROFILL]-128到127。无符号的范围是0到255。

BITBOOL它们是TINYINT(1)的同义词。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]一个小整数。有符号的范围是-32768到32767。无符号的范围是0到65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]一个中等大小的整数。有符号的范围是-8388608到8388607。无符号的范围是0到16777215。

INT[(M)] [UNSIGNED] [ZEROFILL]一个正常大小的整数。有符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]INT的同义词。

BIGINT[(M)] [UNSIGNED] [ZEROFILL]一个大的整数。有符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。

你应该知道的有关BIGINT列的一些事情:

BIGINT或DOUBLE值来完成的,因此你不应该使用大于9223372036854775807(63 bits) 的无符号大整数,除了位函数之外!如果你这样做了,结果中的某些大数字可能会出错,因为将BIGINT转换成DOUBLE时产生了舍入错误。MySQL 4.0 在下列情况下可以处理BIGINT:

在一个BIGINT列中使用整数存储一个大的无符号值。

在MIN(big_int_column)和MAX(big_int_column)中。

当两个操作数都是整数时使用操作符 (+、-、*、等)。

通常你可以在一个BIGINT列中以字符串方式存储的一个精确的整数。在这种情况下,MySQL 将执行一个字符串到数字的转换,包括无 intermediate 的双精度表示法。

当两个参数均是整数值时,“-”、“+”和“*”将使用BIGINT运算!这就意味着,如果两个大整数的乘积(或函数的结果返回整数)的结果大于9223372036854775807时,你可能会得到意想不到的结果。

FLOAT(precision) [UNSIGNED] [ZEROFILL]一个浮点型数字。

precision可以是=24作为一个单精度的浮点数字和介于 25 和 53 之间作为一个双精度的浮点数字。这些类型与下面描述的FLOAT和DOUBLE类型相似。FLOAT(X)有与相应的FLOAT和DOUBLE类型同样的范围,但是显示尺寸和十进制小数位数是未定义的。在 MySQL 3.23 中,它是一个真实的浮点值。而在 MySQL 早期的版本中,FLOAT(precision)通常有 2 小数位。 注意,由于在 MySQL 中所有的计算都是以双精度执行的,所以使用FLOAT可能带来一些意想不到的问题。查看章节A.5.6 解决没有匹配行的问题。

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]一个小的(单精度) 浮点数字。允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。如果UNSIGNED被指定,负值是不允许的。M是显示宽度,D是小数位数。FLOAT没有参数或有X= 24 的FLOAT(X)代表一个单精度的浮点数字。

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]一个正常大小的(双精度)浮上数字。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308。如果UNSIGNED被指定,负值是不允许的。M是显示宽度,D是小数位数。DOUBLE没胡参数或有 25 =X= 53 的FLOAT(X)代表一个双精度的浮点数字。

DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]

REAL[(M,D)] [UNSIGNED] [ZEROFILL]它们是DOUBLE同义词。

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]一个未压缩(unpacked)的浮点数。运作如同一个CHAR列:“unpacked” 意味着数字是以一个字符串存储的,值的每一位将使用一个字符。小数点并且对于负数,“-”符号不在M中计算(但是它们的空间是被保留的)。如果D是 0,值将没有小数点或小数部份。DECIMAL值的最大范围与DOUBLE一致,但是对于一个给定的DECIMAL列,实际的范围可以被所选择的M和D限制。如果UNSIGNED被指定,负值是不允许的。 如果D被忽略,缺省为 0。如果M被忽略,缺省为 10。 在 MySQL 3.23 以前,M参数必须包含符号与小数点所需的空间。

DEC[(M[,D])] [UNSIGNED] [ZEROFILL]

NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]DECIMAL的同义词。

DATE一个日期。支持的范围是'1000-01-01'到'9999-12-31'。MySQL 以'YYYY-MM-DD'格式显示DATE值,但是允许你以字符串或数字给一个DATE列赋值。查看章节6.2.2.2DATETIME、DATE和TIMESTAMP类型。

DATETIME一个日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL 以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但是允许你以字符串或数字给一个DATETIME列赋值。查看章节6.2.2.2DATETIME、DATE和TIMESTAMP类型。

TIMESTAMP[(M)]一个时间戳。范围是'1970-01-01 00:00:00'到2037年间的任意时刻。 MySQL 4.0 和更早版本中,TIMESTAMP值是以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式显示的,它取决于M是否是14(或省略)、12、8或6,但是允许你以字符串或数字给一个TIMESTAMP列赋值。 从 MySQL 4.1 开始,TIMESTAMP以'YYYY-MM-DD HH:MM:DD'格式作为字符返回。如果你你希望以数字形式返回则必须在该时间戳字段后加上 +0。不同的时间戳长度是不支持的。从 MySQL 4.0.12 开始,选项--new可以被用来使服务器与 4.1 一样运作。TIMESTAMP列有益于记录一个INSERT或UPDATE操作的日期和时间,因为如果你自己没有给它赋值,它将被自动地设置为最近一次操作的日期和时间。也可以通过给它赋一个NULL而使它设置为当前的日期和时间。查看章节6.2.2 Date 和 Time 类型。 参数M只影响一个TIMESTAMP列的显示格式;它的值总是占用 4 个字节存储。 注意,当TIMESTAMP(M)列的M是 8 或 14 时,它返回的是数字而其它的TIMESTAMP(M)列返回的是字符串。这仅仅是为了可以可靠地转储并恢复到其它格式的表中。查看章节6.2.2.2DATETIME、DATE和TIMESTAMP类型。TIME一个时间。范围是'-838:59:59'到'838:59:59'。MySQL 以'HH:MM:SS'格式显示TIME值,但是允许你使用字符串或数字来给TIME列赋值。查看章节6.2.2.3TIME类型。YEAR[(2|4)]一个 2 或 4 位数字格式的年(缺省为 4 位)。允许的值是1901到2155、0000(4 位年格式) 以及使用 2 位格式的 1970-2069 (70-69)。MySQL 以YYYY格式显示YEAR值,但是允许你使用字符串或数字来给YEAR列赋值。(YEAR类型在 MySQL 3.22 之前不支持。) 查看章节6.2.2.4YEAR类型。

[NATIONAL] CHAR(M) [BINARY]一个定长的字符串,当存储时,总是以空格填满右边到指定的长度。M的范围是 0 到 255 (在 MySQL 3.23 版本之前为 1 到 255)。当该值被检索时,尾部空格将被删除。CHAR值根据缺省的字符集进行忽略大小写的排索与比较,除非指定了关键词BINARY。NATIONAL CHAR(或短形式NCHAR) 是以 ANSI SQL 方式定义一个CHAR列,它将使用缺省的字符集。这在 MySQL 中是默认的。

CHAR是CHARACTER的缩写。 MySQL 允许以CHAR(0)类型建立一个列。一些老程序运行时必需一个列,却又并不使用这个列的值,你就不得不为了适应它而建立该列,在这情况下,CHAR(0)将是很有益的。当需要一个列仅保存两个值时:一个为CHAR(0)(该列没有定义为NOT NULL),这将仅占用一个比特位来存储 2 个值:NULL或""。查看章节6.2.3.1CHAR和VARCHAR类型。CHAR这是CHAR(1)的同义词。

[NATIONAL] VARCHAR(M) [BINARY]一个变长的字符串。注意:尾部的空格在存储时将会被删除(这与 ANSI SQL 约规不同)。M的范围是 0 到 255 (在 MySQL 4.0.2 之前的版本中是 1 到 255)。

VARCHAR值以大小写忽略方式进行排索与比较,除非关键词BINARY被指定。查看章节6.5.3.1 隐式的列定义变化。VARCHAR是CHARACTER VARYING的缩写。查看章节6.2.3.1CHAR和VARCHAR类型。

TINYBLOBTINYTEXT一个BLOB或TEXT列,最大长度为 255 (2^8 - 1) 个字符。查看章节6.5.3.1 隐式的列定义变化。查看章节6.2.3.2BLOB和TEXT类型。

BLOBTEXT一个BLOB或TEXT列,最大长度为 65535 (2^16 - 1) 个字符。查看章节6.5.3.1 隐式的列定义变化。查看章节6.2.3.2BLOB和TEXT类型。

MEDIUMBLOBMEDIUMTEXT一个BLOB或TEXT列,最大长度为 16777215 (2^24 - 1) 个字符。查看章节6.5.3.1 隐式的列定义变化。查看章节6.2.3.2BLOB和TEXT类型。

LONGBLOBLONGTEXT一个BLOB或TEXT列,最大长度为 4294967295 (2^32 - 1) 个字符。查看章节6.5.3.1 隐式的列定义变化。注意,由于服务器/客户端的协议以及 MyISAM 表通常有一个 16M 每通信包/表行的限制,你仍然不能使用这个类型的整个范围。查看章节6.2.3.2BLOB和TEXT类型。ENUM('value1','value2',...)一个枚举类型。一个仅能有一个值的字符串对象,这个值选自值列'value1'、'value2'、...、NULL或特殊的""出错值。一个ENUM列可以有最大 65535 不同的值。查看章节6.2.3.3ENUM类型。SET('value1','value2',...)一个集合。一个能有零个或更多个值的字符串对象,其中每个值必须选自值列'value1'、'value2'、...。一个SET列可以有最大 64 个成员。查看章节6.2.3.4SET类型。

MySQL 支持所有的 ANSI/ISO SQL92 数字类型。这些类型包括准确数字的数据类型(NUMERIC、DECIMAL、INTEGER和SMALLINT),也包括近似数字的数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键词INT是INTEGER的同义词,关键词DEC是DECIMAL的同义词。

NUMERIC和DECIMAL类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例如:

salary DECIMAL(5,2)

在这个例子中,5(精度(precision)) 代表重要的十进制数字的数目,2(数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary列可以存储的值范围是从-99.99到99.99。(实际上 MySQL 在这个列中可以存储的数值可以一直到999.99,因为它没有存储正数的符号)。

译者注:

M 与D 对DECIMAL(M, D) 取值范围的影响

类型说明 取值范围(MySQL 3.23) 取值范围(MySQL = 3.23)

DECIMAL(4, 1) -9.9 到 99.9 -999.9 到 9999.9

DECIMAL(5, 1) -99.9 到 999.9 -9999.9 到 99999.9

DECIMAL(6, 1) -999.9 到 9999.9 -99999.9 到 999999.9

DECIMAL(6, 2) -99.99 到 999.99 -9999.99 到 99999.99

DECIMAL(6, 3) -9.999 到 99.999 -999.999 到 9999.999

# 在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于早期版本中的DECIMAL(M + 2, D) 的取值范围。注释结束:

在 ANSI/ISO SQL92 中,句法DECIMAL(p)等价于DECIMAL(p,0)。同样的,在执行被允许决定值p的地方,句法DECIMAL等价于DECIMAL(p,0)。MySQL 目前还不支持DECIMAL/NUMERIC数据类型的这些变体形式中的任一种。一般来说这并不是一个严重的问题,通过明确地控制精度和数值范围可以得到这些类型的主要功能益处。

DECIMAL和NUMERIC值是作为字符串存储的,而不是作为二进制浮点数,以便保护这些值的十进制精确度。一个字符用于数值的每一位、小数点(如果scale 0) 和“-”符号(对于负值)。如果scale是 0,DECIMAL和NUMERIC值不包含小数点或小数部分。

DECIMAL和NUMERIC值的最大范围与DOUBLE一致,但是对于一个给定的DECIMAL或NUMERIC列,它的实际范围可制定该列时的precision或scale限制。当这样的列被赋给了小数点的位数超过scale所指定的值时,该将根据scale进行四舍五入。当一个DECIMAL或NUMERIC列被赋与一个大小超过指定(或缺省)的precisionandscale的限止范围时,MySQL 以该列范围的端点值存储该值。


标题名称:mysql怎么获取子元素 mysql获取某字符
URL地址:http://csdahua.cn/article/ddigjoc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流