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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - 数据库管理 » 数据库配置 » 国际语言和字符集 » 有关国际语言和字符集的任务

 

将数据库从一种归类更改为另一种归类

 ♦ 更改归类

将数据库更改为另一种归类需要重建数据库。归类是在数据库创建时选择的,且无法进行更改。

  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. 可按如下方式创建新数据库,指定要使用的归类和字符集:

    dbinit -z 1252LATIN1 c:\newdatabase.db 
  6. 可按如下方式停止旧的数据库服务器和启动新的数据库服务器:

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

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

    dbunload -ix c:\databasefile

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

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

 另请参见