Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 11 - 更改和升级 » 11.0.1 版中的新功能

 

SQL Anywhere 的行为更改和不建议使用的功能

以下列出了 11.0.1 版中引入的 SQL Anywhere 数据库和数据库服务器更改(根据类别分组)。

行为更改
  • 全文搜索   对全文搜索做出了以下行为更改:

    • 现在应用运算符优先级   以前,在查询字符串中不对运算符应用优先级。现在,可以应用以下运算符优先级:

      • NEAR、FUZZY 运算符
      • AND NOT 运算符
      • AND 运算符
      • OR 运算符

      请参见CONTAINS 搜索条件中的运算符优先级

    • NEAR 子句参数必须是术语或前缀术语   在执行邻近搜索时,NEAR 子句的参数必须是术语或前缀术语。请参见CONTAINS 搜索条件邻近搜索

    • 连字符的使用和 AND NOT 子句   在短语内,连字符被视为术语中断符,而不是特殊字符。在短语之外,连字符的处理取决于连字符附近的语法。请参见对于连字符 (-) 允许的语法在全文搜索中使用 AND NOT 运算符

    • 星号的使用和前缀搜索   在执行前缀搜索时,必须将星号附加于术语,并且后面紧跟一个空格、查询字符串结尾或允许的特殊字符之一。请参见对于星号 (*) 允许的语法前缀搜索

    • 创建重复文本索引现在将返回错误   不再可以创建重复文本索引。如果以下设置与某现有文本索引的设置相同,则将文本索引视为重复项:

      • 所引用的基本表

      • 要建立索引的列(顺序不重要)

      • 所使用的配置对象的设置(TERM BREAKER、MINIMUM TERM LENGTH、MAXIMUM TERM LENGTH、STOPLIST、归类信息)

      在 SQL Anywhere 11.0.1 之前的版本中创建的重复文本索引可以保留在数据库中,并且在通过 11.0.1 数据库服务器启动时不会导致错误。但是,如果将包含重复文本索引的数据库重新加载到 11.0.1 版或更高版本上,则会返回错误。

      要识别现有数据库中的重复文本索引,请执行以下查询:

      SELECT LIST( i.index_name )
      FROM SYS.SYSIDX i 
          JOIN SYS.SYSTEXTIDX t ON i.object_id = t.index_id AND t.sequence = 1
          JOIN SYS.SYSTEXTCONFIG F ON F.object_id = t.text_config
          JOIN ( 
      	SELECT table_id, index_id, LIST( column_id, ', ' ORDER BY column_id ) col_id
      	FROM SYS.SYSIDXCOL
      	GROUP BY table_id, index_id) x 
      	ON x.table_id = i.table_id AND x.index_id = i.index_id
      WHERE i.index_category=4
      GROUP BY i.table_id, f.term_breaker, f.min_term_length, f.max_term_length, 
          f.collation, ISNULL( f.char_stoplist, '-' ), 
          ISNULL( f.nchar_stoplist, '-' ), x.col_id
      HAVING count(*) > 1

      只有代表 STOPLIST 的字符串完全相同或者已指定 NO STOPLIST 时该查询才有效。例如,使用此查询时,不会将非索引字表 'a b c' 和 'a - b c' 视为是相同的非索引字表,但在文本索引创建期间的重复项检查过程中,它们会被视为相同。

  • 正则表达式   已经对 SIMILAR TO 和 REGEXP 搜索条件以及 REGEXP_SUBSTR 函数的行为进行了更改。更改的总体目的是继续使 SIMILAR TO 符合 ANSI/SQL 标准,同时使 REGEXP 和 REGEXP_SUBSTR 的行为符合 Perl。

    • 数据库归类和匹配   以前,REGEXP 和 REGEXP_SUBSTR 通过使用归类等同性和排序顺序来确定模式中的文字或字符类范围是否与字符串匹配。现在,REGEXP 和 REGEXP_SUBSTR 使用代码点值的二进制比较进行匹配和范围评估。进行这一更改是为了使行为符合 Perl 5.0。

      SIMILAR TO 仍然使用数据库归类进行匹配和范围评估。请参见LIKE、REGEXP 和 SIMILAR TO 搜索条件

    • 数据库区分大小写以及 [[:upper:]]和 [[:lower:]]子字符类   SIMILAR TO 及 REGEXP [[:upper:]]和 [[:lower:]]子字符类在不区分大小写的数据库中是不区分大小写的。这在 11.0.1 中发生了变化,以便 [[:upper:]]仅匹配大写字符,而 [[:lower:]]仅匹配小写字符(无论数据库是否区分大小写)。

    • 将脱字符 (^)、下划线 (_) 和百分号 (%) 作为元字符的处理方式   下表说明了以前和现在将这些字符作为元字符的处理方式:

      字符 以前的行为 最新的行为
      _(下划线) 对于 SIMILAR TO、REGEXP 和 REGEXP_SUBSTR,下划线被视为元字符:它与任意单字符匹配。

      对于 SIMILAR TO,下划线被视为元字符:它与任意单字符匹配。

      对于 REGEXP 和 REGEXP_SUBSTR,下划线不被视为元字符。REGEXP 和 REGEXP_SUBSTR 使用句点 (.) 匹配任意单字符。

      % 对于 SIMILAR TO、REGEXP 和 REGEXP_SUBSTR,百分号被视为元字符:它与任意数量的任何字符匹配。

      对于 SIMILAR TO,百分号被视为元字符:它与任意数量的任何字符匹配。

      对于 REGEXP 和 REGEXP_SUBSTR,百分号不被视为元字符。REGEXP 和 REGEXP_SUBSTR 使用点星号 (.*) 匹配任意数量的任何字符。

      ^ 对于 SIMILAR TO、REGEXP 和 REGEXP_SUBSTR,字符类内部的脱字符被视为它右侧任何字符的取非或相减字符:它被解释为不匹配。

      对于 SIMILAR TO,脱字符被视为它右侧字符的取非或相减字符。例如,SIMILAR TO [a-d^c] 与 a、b 和 d 匹配,但不与 c 匹配。

      对于 REGEXP 和 REGEXP_SUBSTR,只有当脱字符位于字符类中的第一个位置时,才会将它视为元字符:它被解释为字符类的取非。例如,REGEXP [^abc] 与 a、b 或 c 以外的任何单字符匹配,而 REGEXP [a-d^c] 与 a、b、c、d 和 ^ 匹配。

  • Mac OS X 不再需要 dbmodenv   在以前的版本中,要使用 Mac OS X 上的图形管理工具,用户的 $HOME/.MacOSX/environment.plist 文件必须将 SQL Anywhere 二进制内容和库位置添加到 PATH 和 DYLD_LIBRARY_PATH。可以使用 dbmodenv 工具来完成此操作。SQL Anywhere 不再依赖 $HOME/.MacOSX/environment.plist 中的设置,您也不再需要在安装 SQL Anywhere 之后运行 dbmodenv 或注销并再次登录。

  • 更改了从 dbisqlc OUTPUT 语句返回的空值的缺省值   在以前的版本中,如果使用来自 dbisqlc 的 OUTPUT 语句,该语句将为空值返回值 [(NULL)]。现在,在缺省情况下,该语句将为空值返回空字符串。您可以通过设置 output_nulls 选项来改变 NULL 值的导出方式。请参见output_nulls 选项 [Interactive SQL]

  • Endian 支持   升级后,在 big-endian 计算机上创建的 11.0.1 版之前的文本索引需要截断和刷新(对于 MANUAL REFRESH 和 AUTO REFRESH 文本索引)或重新创建(对于 IMMEDIATE REFRESH 索引)。

  • Mac OS X 上的管理工具   现在在 Mac OS X 上,SQL Anywhere 管理工具使用 64 位 JDK 1.6。管理工具只能在使用 Apple JDK 1.6 所支持的 64 位处理器的 Intel Macintosh 机(Mac OS X 10.5.2 或更高)上运行。如果要为 Mac OS X 部署管理工具,本地库位于 $SQLANY11/System/lib64 下。请参见在 Linux、Solaris 和 Mac OS X 上部署管理工具

  • HTTP 客户端分块传输编码的新缺省大小   先前,如果 HTTP client 发送超过 2048 字节的数据,缺省情况下(或者如果用户指定CREATE PROCEDURE ... SET 'HTTP(CH=auto)'时)会尝试分块传输编码。缺省大小已从 2048 字节更改为 8196 字节。此外,还新增了一个状态 411 需要长度,此状态在需重新发送未使用分块传输编码的请求时使用。请参见CREATE PROCEDURE 语句(Web 服务)

不建议使用和停用的功能
  • COMMENT ON EXTERNAL ENVIRONMENT OBJECT object-name   语法已更改为 COMMENT ON EXTERNAL OBJECT object-name。目前仍接受旧语法,但在未来版本中可能不再支持该语法。请参见COMMENT 语句

  • 支持 ansi_substring 选项   ansi_substring 选项 11.0.0 版不建议使用,但是现在在 11.0.1 版中将受支持。请参见 ansi_substring 选项 [兼容性]