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 子句返回錯誤。
低
總結
以上是生活随笔為你收集整理的mysql修改数据库级别_设置数据库兼容级别的两种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机文化基础操作考试,(计算机文化基础
- 下一篇: 尼康d850相机参数测试软件,尼康 D8