mysql修改数据库级别_设置数据库兼容级别的两种方法

兼容级别设置为 80 兼容级别设置为 90 影响的可能性

对于 FROM 子句中的锁提示,WITH 关键字始终是可选的。

但在一些例外情况中,仅当用 WITH 关键字指定表提示时,FROM 子句中才支持这些提示。有关详细信息,请参阅 FROM (Transact-SQL)。

支持在警告消息中使用外部联接运算符 *= 和 =*。

不支持使用这两个运算符;应使用 OUTER JOIN 关键字。

在将 ORDER BY 列表中的列引用绑定到在 SELECT 列表中定义的列时,将忽略列的多义性,有时还会忽略列前缀。这可以导致以意外顺序返回结果集。

例如,包含有一个两部分列 (.) 的 ORDER BY 子句可以用作对 SELECT 列表中的列的引用,但会忽略表的别名。请考虑下面的查询。

SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1

执行时,将忽略 ORDER BY 中的列前缀。排序操作对指定的源列 (x.c1) 不按预期方式执行,而是对在查询中定义的派生 c1 列执行。此查询的执行计划将显示:首先计算派生列的值,然后对计算得到的值进行排序。

如果存在列的多义性,则将引发错误。在绑定到 SELECT 列表中所定义的列时,不忽略在 ORDER BY 中指定的列前缀(如果有)。

请考虑下面的查询。

SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1

执行时,不忽略 ORDER BY 子句中的列前缀。排序操作对指定的源列 (x.c1) 按预期方式执行。此查询的执行计划将显示排序运算符对从 t_table 返回的行排序,然后再对在 SELECT 列表中定义的派生列 c1 的值排序。

在 INSERT SELECT 中,如果 UNION 属于不同的数据类型,则每个 UNION 分支都直接转换为 INSERT 目标列的类型。即使本身所使用的联合可能会因不兼容的类型转换而失败,INSERT SELECT 也会使 UNION 成功执行,因为 UNION 的结果类型的分支从不进行转换。

UNION 的结果类型是独立于 INSERT SELECT 而派生的。UNION 的每一分支都转换为 UNION 的结果类型,然后转换为 INSERT 的目标列类型。如果 UNION 中有不兼容类型,则第一个转换可能会导致错误。若要以兼容级别 90 运行,则必须修复在 INSERT SELECT 中使用的所有不兼容类型的联合。

当视图或被引用视图使用 TOP 子句时,指定了 WITH CHECK OPTION 子句的视图中无法正确支持通过视图进行插入和更新操作。

当视图或被引用视图使用 TOP 子句时,使用 WITH CHECK OPTION 的视图中不支持通过视图进行插入和更新操作。

可变长度列和固定长度列的 UNION 将生成一个固定长度列。

可变长度列和固定长度列的 UNION 将生成一个可变长度列。

允许在触发器中使用 SET XACT_ABORT OFF。

不允许在触发器中使用 SET XACT_ABORT OFF。

允许在视图中使用(并忽略)FOR BROWSE 子句。

不允许在视图中使用 FOR BROWSE 子句。

ANSI_WARNINGS 不控制域错误。如果 ANSI_WARNINGS 设置为 OFF 并且 ARITHABORT 没有更改,则遵守 ARITHABORT 设置。

域错误由 ANSI_WARNINGS 控制,并且是严重级别为 16 的错误。如果 ANSI_WARNINGS 或 ARITHABORT 为 ON,则将引发错误,而不是返回 NULL 值。此更改可能会破坏依赖于设置为 OFF 的 ARITHABORT 的用户脚本。

如果对远程数据源(OpenRowset 或 OpenQuery)所执行的直接传递查询生成名称重复的列,则除非在该查询中显式命名了这些列,否则将忽略重复的列名。

如果对远程数据源(OpenRowset 或 OpenQuery)所执行的直接传递查询生成列名重复的列,将引发错误。

大小大于 8000 的字符串常量和 varbinary 常量被视为 text、ntext 或 image。

大小大于 8000 的字符串常量和 varbinary 常量被视为 varchar(max) 类型(或分别被视为 nvarchar(max) 和 varbinary(max))。如果 SELECT 列表包含此类表达式,则这样可以更改使用 SELECT … INTO 创建的表的数据类型。

通过将类型层次结构中优先级较低的比较数转换为优先级较高的类型,从而在各数值类型(smallint、tinyint、int、bigint、numeric、decimal、smallmoney、money)之间进行比较。

数值类型值不经转换便进行比较。这有助于提高性能。但这可能会导致行为发生某些更改,尤其是在转换导致溢出异常的情况下。

使用字符串参数的内置元数据函数在其输入长度大于 4000 个字符的情况下,将截断该输入。

如果截断导致丢失非空格字符,则内置元数据函数会引发错误。

未加引号的标识符中被禁用的字符集保持不变。

Transact-SQL 分析器支持 Unicode 3.2 标准,该标准更改了目前禁止在未分隔标识符中使用的一些国际字符的字符分类。

在出现浮点域错误(即 log() 函数的参数为负)时,SET ANSI_WARNINGS ON 不覆盖 SET ARITHABORT OFF 的设置。如果 ANSI_WARNINGS 为 ON 但 ARITHABORT 为 OFF,则浮点域错误不会导致查询终止。

SET ANSI_WARNINGS ON 完全覆盖 ARITHABORT OFF 设置。在这种情况下,浮点域错误将导致查询终止。

允许在 ORDER BY 子句中使用(并忽略)非整数常量。

不允许在 ORDER BY 子句使用非整数常量。

允许使用空的 SET 语句(未指定 SET 选项)。

不允许使用空的 SET 子句。

没有为派生表所生成的列正确派生 IDENTITY 属性。

为派生表所生成的列正确派生了 IDENTITY 属性。

对浮点数据类型执行运算的算术运算符的可为 Null 性属性始终可以为 Null。

在输入不可为 Null 并且 ANSI_WARNINGS 为 ON 的情况下,对浮点数据类型执行运算的算术运算符的可为 Null 性属性将更改为不可为 Null。

在使用 UNION 组合的 INSERT ..SELECT 语句中,由各个结果集生成的类型都将转换为目标结果类型。

在使用 UNION 组合的 INSERT ..SELECT 语句中,确定各分支的主要类型,并在将结果转换为目标表类型之前将其转换为该类型。

在 SELECT ..FOR XML 语句中,始终实体化 hex(27)(' 字符)和 hex(22)(" 字符),即使在不需要的情况下也是如此。

FOR XML 只在需要时才实体化 hex(27) 和 hex(22)。在下列情况下不实体化这些字符:

在属性内容中,如果属性值以 " 分隔,则不实体化 hex(27)(' 字符);如果属性值以 ' 分隔,则不实体化 hex(22)(" 字符)。

在元素内容中,从不实体化 hex(27) 和 hex(22)。

在 FOR XML 中,时间戳值映射为整数。

在 FOR XML 中,时间戳值映射为二进制值。

有关详细信息,请参阅 timestamp 数据类型的 FOR XML 支持。

如果使用 timestamp 列,则为高;否则为低

在 FOR XML 和 OPENXML 中,名称中大范围 Unicode 字符(3 字节)使用 8 位表示。

例如,FOR XML 用 8 位表示 Unicode 码位 U+10000 的方式如下:

在 FOR XML 和 OPENXML 中,名称中大范围 Unicode 字符(3 字节)使用 6 位表示。

例如,FOR XML 用 6 位表示 Unicode 码位 U+10000 的方式如下:

在 FOR XML 中,使用 AUTO 模式的派生表映射被视为是透明的。

例如:

复制代码

USE AdventureWorks

CREATE TABLE Test(id int);

INSERT INTO Test VALUES(1);

INSERT INTO Test VALUES(2);

SELECT * FROM (SELECT a.id AS a,

b.id AS b FROM Test a

JOIN Test b ON a.id=b.id)

Test FOR XML AUTO;

如果 AdventureWorks 的兼容级别设置为 80,则以上示例将生成:

在 FOR XML 中,使用 AUTO 模式的派生表映射被视为是不透明的。

如果 AdventureWorks 的兼容级别设置为 90,则以上示例将生成:

如果对视图应用 FOR XML AUTO 模式,则为高;否则为低

仅在日语和朝鲜语中,字符串到 money 的转换才支持使用反斜杠字符 (/) 作为货币符号。

在所有语言中,所有字符串到 money 的转换中都接受反斜杠字符 (/)。当 / 用作货币符号时,ISNUMERIC 将返回 True。

对于 SQL Server 2005 之前的 SQL Server 版本上的数据库,这一新行为会拆分依赖于包含 / 的 ISNUMERIC 返回值并且所使用的语言既不是日语也不是朝鲜语的索引和计算列。

即使操作数不可为 Null 并且 ANSI_WARNINGS 或 ARITHABORT 设置为 ON,算术运算符的结果也始终可为 Null。

在 ANSI_WARNINGS 或 ARITHABORT 设置为 ON 时,如果两个操作数都不可为 Null,则浮点算术运算符的结果也不可为 Null。

在以下情况中,这种为空性的更改可能导致错误:使用 bcp 从包含计算列(该计算列使用浮点算术运算符)的 SQL Server 2000 表中大容量导出二进制格式的数据,然后使用 bcp 或 BULK INSERT 将这些数据大容量导入包含同一定义的 SQL Server 2005 表。

注意:

当两个选项均为 OFF 时,数据库引擎 将把结果标记为可以为 Null。这与 SQL Server 2000 中相同。

对于以 nvarchar 作为参数的内置函数,如果所提供的值为 varchar,则该值将转换为 nvarchar(4000)。在 SQL Server 2000 中,如果传递较大值,则该值将自行截断。

对于以 nvarchar 作为参数的内置函数,即使所提供的值为 varchar,该值仍将转换为 nvarchar(4000)。但如果传递较大值,SQL Server 2008 将生成错误。

若要以兼容级别 90 运行,必须修复依赖于截断行为的所有自定义代码。

固定长度(char、binary 或 nchar)字符串与可变长度(varchar、varbinary、nvarchar)字符串的联合返回固定长度的结果。

可变大小字符串和固定大小字符串的联合返回可变大小字符串。

若要以兼容级别 90 运行,那么对于任何地方(索引、查询和计算列),只要它依赖与将可变大小类型和固定大小类型求并集得到的类型,就必须修复。

包含字符 0xFFFF 的对象名是有效标识符。

包含字符 0xFFFF 的对象名是无效标识符,不能访问。

若要以兼容级别 90 运行,必须重命名包含此字符的对象。

在 SELECT ISNUMERIC('') 中, 内嵌入的逗号非常重要。

例如,以下 SELECT ISNUMERIC('121212,12') 查询返回 0。这指示字符串 121212,12 不是数字。

在 SELECT ISNUMERIC('') 中, 内嵌入的逗号可以忽略。

例如,以下 SELECT ISNUMERIC('121212,12') 查询返回 1。这指示字符串 121212,12 是数字。

忽略了 Transact-SQL 语句中保留关键字后面的冒号 (:)。

Transact-SQL 语句中保留关键字后面的冒号 (:) 将导致语句失败。

引用外部查询中的列的子查询中的 GROUP BY 子句成功。

按照 SQL 标准,引用外部查询中的列的子查询中的 GROUP BY 子句返回错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Github PageHelper 原理解析

任何服务对数据库的日常操作,都离不开增删改查。如果一次查询的纪录很多,那我们必须采用分页的方式。对于一个Springboot项目,访问和查询MySQL数据库,持久化框架可以使用MyBatis,分页工具可以使用github的 PageHelper。…

Springboot Mybatis使用PageHelper实现分页查询

以下介绍实战中数据库框架使用的是mybatis&#xff0c;对整合mybatis此处不做介绍。 使用pageHelper实现分页查询其实非常简单&#xff0c;共两步&#xff1a; 一、导入依赖&#xff1b; pom.xml添加依赖&#xff1a; <!--分页插件 pagehelper --> <dependency>…

mysql 与 xls 连接_数据库MySQL与xls文件的互导

最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中&#xff0c;在网上搜了很多资料&#xff0c;经过多次尝试终于实现了功能&#xff0c;废话不多说&#xff0c;在这粘贴出代码&#xff0c;希望可以帮到需要的朋友。一、将.xls表导入到MySQL数据表中。…

Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例

如何用一条sql语句实现批量更新&#xff1f;mysql并没有提供直接的方法来实现批量更新&#xff0c;但是可以用点小技巧来实现。 代码如下: UPDATE mytable SET myfield CASE id WHEN 1 THEN valueWHEN 2 THEN valueWHEN 3 THEN value END WHERE id IN (1,2,3);这里使用了c…

MySQL可运行在不同的操作系统下_不同操作系统下的mysql数据库同步

当数据库的数据量读写频繁的时候&#xff0c;我们就要考虑把数据库的读写分开&#xff0c;以提高数据库的使用效率&#xff0c;(当然还有其他用处比如&#xff0c;备份数据)&#xff0c;这个时候我们就要用到mysql的一个功能&#xff0c;数据库同步。下面就具体讲一下实现方法。…

@RequestBody和@RequestParam区别

一&#xff1a;RequestBody和RequestParam区别 RequestParam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。&#xff08;Http协议中&#xff0c;如果不指定Content-Type&#xff0c;则默认传递的参数就是application/x-www-form-urlencoded类型&am…

mysql内置加密函数_MySQL数据库内置加密函数总结

首先&#xff0c;我认识的加密函数有以下几个&#xff1a;password(plainText)&#xff1a;旧版(OLD_PASSWORD())加密后长度16位&#xff0c;新版41位select length(password("123456"))可以用来查看加密后的字符串的长度。这种加密方法依赖数据库&#xff0c;需要保…

Query String Parameters、Form Data、Request Payload的区别

Query String Parameters 当发起一次GET请求时&#xff0c;参数会以url string的形式进行传递。即?后的字符串则为其请求参数&#xff0c;并以&作为分隔符。 如下http请求报文头&#xff1a; GeneralRequest URL: http://login?unamedingdingRequest Method: GETQuery…

c mysql 添加数据类型_MYSQL的常用命令和增删改查语句和数据类型

连接命令&#xff1a;mysql -h[主机地址] -u[用户名] -p[用户密码]创建数据库&#xff1a;create database [库名]显示所有数据库: show databases;打开数据库:use [库名]当前选择的库状态:SELECT DATABASE();创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) …

@requestbody和@requestparam作用

1、什么都不写 GET 可以自动封装为对象模型&#xff0c;没有的数值自动为0值 POST 请求体里面放了数据&#xff0c;但是还是使用了RequestParam里的数据 总结&#xff1a; 在不使用注解的情况下&#xff0c;相当于默认使用了RequestParam里的数据 &#xff08;这种理解是错…

@RequestBody的使用

提示&#xff1a;建议一定要看后面的RequestBody的核心逻辑源码以及六个重要结论本文前半部分的内容都是一些基 本知识常识&#xff0c;可选择性跳过。 声明&#xff1a;本文是基于SpringBoot&#xff0c;进行的演示说明。 基础知识介绍&#xff1a; ​ RequestBody主要用来接…

mysql 字段值为 a b c_数据的虚拟列-让数据库中的C字段等于a+b

直接用update aaaaa aa set aa.f (aa.aaa.b)就行了引出来的新知识--虚拟列虚拟列的好处是:如果cab那插入数据时&#xff1b;值只插入a1,b2;那么c会自动是3oracle temporary table and virtual column(2013-07-31 15:06:55)表是数据库中保存用户数据最基本的结构。下面我简要的…

@RequestBody 和 @RequestParam可以同时使用

RequestParam和RequestBody这两个注解是可以同时使用的。 网上有很多博客说RequestParam 和RequestBody不能同时使用&#xff0c;这是错误的。根据HTTP协议&#xff0c;并没有说post请求不能带URL参数&#xff0c;经验证往一个带有参数的URL发送post请求也是可以成功的。只不过…

mysql索引使增删变慢_mysql优化之索引篇

mysql&#xff0c;对it打工人&#xff0c;这个几乎是必备的技能之一。mysql可以解决我们平时工作中的大量的、有关增删查改的问题。所以想深入了解mysql&#xff0c;我觉得关键在于他的增删查改背后的算法&#xff0c;开搞。面对增删查改等问题&#xff0c;直接通过场景来看吧场…

POST、GET、@RequestBody和@RequestParam区别

RequestParam 注解RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。 RequestParam可以接受简单类型的属性&#xff0c;也可以接受对象类型。 RequestParam有三个配置参数&#xff1a; required 表示是否必须&#xff0c;默认为 true&#xff0c;必须。de…

python与linux关系_如何处理Linux / Python依赖关系?

由于缺乏对我想使用的一些库的支持,我将一些Python开发从Windows转移到Linux开发.我已经花了大部分时间搞乱了依赖关系.问题每当我拿起Linux,我通常会遇到一些依赖问题,通常是开发库,无论是通过apt-get,easy_install或pip安装.我可以浪费时间,应该是简单的任务,花更长的时间让图…

Springmvc接收json数据的4种方式

1、以RequestParam接收 前端传来的是json数据不多时&#xff1a;[id:id],可以直接用RequestParam来获取值 Autowired private AccomodationService accomodationService;RequestMapping(value "/update") ResponseBody public String updateAttr(RequestParam (&q…

centos安装mysql卡住_CentOS 6.4安装MySQL的过程中出现的bug

在CentOS 6.4下安装MySQL&#xff0c;下载一个源码包&#xff0c;感觉很简单&#xff0c;tar&#xff0c;./configure&#xff0c;make&#xff0c;make install 经典四步&#xff0c;弄这个也不是第一次了&#xff0c;但今天就是老出错&#xff0c;首先是./configure中&#x…

SpringMVC接受List的几种方式

说到SpringMVC接受List参数&#xff0c;可能有人会说这个是个坑&#xff01;下面我来跟大家说怎么补这个坑。下面我分几种情况来讲&#xff1a; 一、只接收一个List 1、form表单提交 controller代码&#xff1a; ResponseBody RequestMapping("test") public voi…

mysql怎么加固_mysql安装及加固

mysql安装查看是否安装mysql我们先看一下有没有安装mysqlyum list installed mysql | grep mysql本地只安装了php链接mysql的库&#xff0c;没有安装mysql如果有安装&#xff0c;可以使用安装的或者卸载了重新安装添加yum源去mysql官网查找下面我就来安装下yum源sudo rpm -ivh …