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

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 参考 » SQL 数据类型 » 数据类型转换 » 数据类型之间的比较

 

有损耗的转换和替换字符

如果字符无法使用要转换后的字符集表示,则改为使用替换字符表示。此类型的转换视为有损耗;如果原始字符不能以目标字符集表示,则原始字符丢失。

另外,不仅不同的字符集可能有不同的替换字符,而且一个字符集中的替换字符在另一个字符集也可能是非替换字符。对一个字符执行多次转换时,了解这些信息很重要,因为最后的字符可能不显示为预期的目标字符集的替换字符。

例如,假定客户端字符集为 Windows-1252,而数据库字符集为 ISO_8859-1:1987(美国一些 Unix 版本的缺省设置)。接着,假定非 Unicode 客户端应用程序(例如,嵌入式 SQL)试图将欧元符号插入 CHAR、VARCHAR 或 LONG VARCHAR 列。由于 CHAR 字符集中没有此字符,所以插入 ISO_8859-1:1987 的替换字符 0x1A。

现在,如果将上面的 ISO_8859-1:1987 替换字符读取为 Unicode(例如,通过在 ODBC 中执行 SELECT * FROM t 到 SQL_C_WCHAR 绑定列的操作),此字符变为 Unicode 代码点 U+001A。(在 Unicode 中,代码点 U+001A 是记录分隔符控制字符。)但是,Unicode 中的替换字符是代码点 U+FFFD。此示例说明,即使数据包含替换字符,由于执行多次转换,这些字符也可能没有转换为目标字符集的替换字符。

因此,了解和测试在多个字符集之间进行转换时如何使用替换字符很重要。

on_charset_conversion_failure 选项有助于确定在转换期间字符不能以目标字符集表示时的行为。请参见on_charset_conversion_failure 选项

 另请参见