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

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » 数据库配置 » 国际语言和字符集 » 归类

 

更改数据库归类

通过对所选的归类进行卸载和重装,可将现有的数据库归类更改为另一归类。归类是在数据库创建时选择的,且无法进行更改,除非重建数据库。

前提条件

您必须具有 SELECT ANY TABLE 和 SERVER OPERATOR 系统特权。

缺省情况下,要执行 UNLOAD 语句,必须具有 SELECT ANY TABLE 系统特权。使用 -gl 数据库服务器选项可对所需的特权进行更改。

 任务
  1. 启动数据库:

    START databasefile 
  2. 确定现有数据库的字符集:

    SELECT DB_PROPERTY( 'CharSet' );

    对于 SQL Anywhere 的早期版本,此属性可能不存在。归类名称也暗示了字符集。例如,归类 1252LATIN1 使用代码页 1252。

    现有数据库中的字符集应与操作系统和客户端字符集相同或兼容。若非如此,就有充分的理由重建数据库,但是在重建过程中需要格外小心。

    特别是,如果您一直都在将采用 850LATIN1 归类的数据库与 SQL Anywhere 的早期版本一起使用,而这些版本不支持字符集转换(版本 5 和更早版本)或在缺省情况下禁用字符集转换(版本 6 和 7),并且您的客户端应用程序是普通 Windows 应用程序,则在您的数据库中可能会存在代码页 1252 字符数据,而该数据库解释的数据应采用代码页 850。

  3. 确定现有数据库中数据的字符集:

    UNLOAD TABLE mytable TO 'mytable-data-in-utf8.dat' ENCODING 'UTF-8';

    在文本编辑器中查看结果。

    如果重音数据正确,则数据库中的字符数据与 Windows ANSI 代码页匹配,对于英语和其它西欧语言,该代码页为 1252。如果数据在基于 DOS 的编辑器中显示正确,则字符数据与 Windows OEM 代码页匹配,该代码页很可能是 437 或 850。

  4. 卸载数据库。

    如果数据字符集与数据库字符集不兼容,在不进行字符集转换的情况下卸载数据就显得至关重要。根据正在使用的 SQL Anywhere 版本,可以使用 dbunload 内部卸载功能,也可以使用 UNLOAD TABLE 语句手动卸载数据。

  5. 创建新数据库,指定要使用的归类和字符集,并将 DBA 用户 ID 和口令设置为 DBA 和 sql:

    dbinit -dba DBA,sql -z 1252LATIN1 c:\newdatabase.db 
  6. 停止旧的数据库服务器并启动新的数据库服务器:

    dbsrv16 -n new-server c:\newdatabase.db 
  7. 将数据装载到新的数据库中。

    如果卸载的数据和模式 (reload.sql) 与用来执行重装的计算机字符集匹配,则可以使用 dbunload 的外部重装选项。数据将自动转换为正确的数据库字符集。例如:

    dbunload -ix c:\databasefile

    如果数据的编码与数据库的字符集不匹配,并且装载数据时使用的是 LOAD TABLE 语句(内部重装),则必须使用 ENCODING 子句;在缺省情况下,数据库服务器不会对使用 LOAD TABLE 语句装载的数据执行字符集转换。

    如果数据的编码与正在使用的计算机的代码页不匹配,并且装载时使用的是 INPUT 语句(外部重装),则必须使用 ENCODING 子句;否则,数据库服务器会假定数据采用计算机的本地字符集。

结果

成功使用新归类重建数据库。

例如,假设您拥有一个使用归类 ISO1LATIN1 的数据库,但您发现需要支持欧元符号。由于 ISO1LATIN1 不支持欧元符号,但其它欧洲字符集(如 1252LATIN1 )则支持,那么您可以卸载数据库,使用 1252LATIN1 创建一个新数据库,然后重装数据库。

请参见[external link] Changing the Collation and Codepage When Rebuilding a SQL Anywhere Database


 另请参见