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 服务器 - 数据库管理 » 配置数据库 » 国际语言和字符集 » 了解字符集

 

单字节字符集

许多语言只有很少的字符,用单字节字符集表示就足够了。在此类字符集中,每个字符都以单个字节来表示:两位十六进制数。

用单个字节最多可以表示 256 个字符。没有一个单字节字符集可以包含国际上使用的所有字符,其中包括带重音符号的字符。通过开发一组代码页解决了这一问题,每个代码页代表适合于一种或多种国家/地区语言的一个字符集。例如,代码页 1253 包含希腊语字符集,代码页 1252 包含西欧语言。代码页有很多,代码页的名称也有很多。以上示例为 Windows 的代码页。

上部页和下部页

除了少数例外情况,对于所有的代码页,字符 0 到 127 都是相同的。此字符范围的映射称为 ASCII 字符集。它包括大写和小写英语字母以及常见的标点符号和阿拉伯数字。此范围通常称为七位范围(因为只需七位即可代表数字 0 到 127)或下部页。从 128 到 255 的字符称为扩展字符上部代码页字符,它们随代码页的不同而不同。

如果仅使用英语字母表中的字符,则很少会出现代码页兼容性问题,因为这些字符都是在各代码页的 ASCII 部分(0 到 127)表示的。但是,如果使用了其它字符(这种情况在任何非英语环境中都很常见),则当数据库和应用程序使用不同的代码页时可能会出现问题。

例如,假定一个使用 UTF-8 字符集的数据库从包含 cp1252 数据的文件中装载了一个表,并且未在 LOAD TABLE 语句中将编码指定为 cp1252。由于未指定编码,数据将被假定采用 UTF-8 编码,因而不会进行任何字符转换;cp1252 编码直接存储在数据库中。这意味着不会将诸如欧元符号(在 cp1252 中表示为十六进制 80)等字符转换成 UTF-8。采用 UTF-8 的欧元符号是以三字节序列 E2 82 AC 表示的,但是,在此情况下,它将以 80 形式存储在数据库中。此后,当应用程序请求数据时,数据库服务器会尝试将数据从 UTF-8 转换为客户端字符集。该转换会产生乱码。