将数据库更改为另一种归类需要重建数据库。归类是在数据库创建时选择的,且无法进行更改。
按如下方式确定现有数据库的字符集:
SELECT DB_PROPERTY( 'CharSet' ); |
对于 SQL Anywhere 的早期版本,此属性可能不存在。归类名称也暗示了字符集。例如,归类 1252LATIN1 使用代码页 1252。
确定现有数据库中数据的字符集。
此字符集应该与数据库字符集相同或与其兼容。若非如此,就有充分的理由重建数据库,但是在重建过程中需要非常小心。
特别是,如果您一直都在将采用 850LATIN1 归类的数据库与 SQL Anywhere 的早期版本一起使用,而这些版本不支持字符集转换(版本 5 和更早版本)或在缺省情况下禁用字符集转换(版本 6 和 7),并且您的客户端应用程序是普通 Windows 应用程序,则在您的数据库中可能会存在代码页 1252 字符数据,而该数据库期望的数据应采用代码页 850。对此情况的简单测试就是使用带有 ENCODING 选项的 UNLOAD TABLE 卸载某些字符数据,然后用 Windows 记事本查看它。如果重音数据正确,则数据库中的字符数据与 Windows ANSI 代码页匹配,对于英语和其它西欧语言,该代码页为 1252。如果数据在基于 DOS 的编辑器中显示正确,则字符数据与 Windows OEM 代码页匹配,该代码页很可能是 437 或 850。
卸载数据库。
如果数据字符集与数据库字符集不兼容,在不进行字符集转换的情况下卸载数据就显得至关重要。根据正在使用的 SQL Anywhere 版本,可以使用 dbunload 内部卸载功能,也可以使用 UNLOAD TABLE 语句手工卸载数据。
创建新数据库,指定要使用的归类和字符集。
将数据装载到新的数据库中。
如果卸载的数据和模式 (reload.sql) 与用来进行重装的计算机字符集匹配,则可以使用 dbunload 的外部重装选项。服务器的字符集转换会自动将数据转换为正确的数据库字符集。
如果数据的编码与数据库的字符集不匹配,并且装载数据时使用的是 LOAD TABLE 语句(内部重装),则必须使用 ENCODING 子句;在缺省情况下,数据库服务器不会对使用 LOAD TABLE 语句装载的数据执行字符集转换。
如果数据的编码与正在使用的计算机的代码页不匹配,并且装载时使用的是 INPUT 语句(外部重装),则必须使用 ENCODING 子句;否则,数据库服务器会假定数据采用计算机的本地字符集。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |