And*_*eas 5 firebird utf-8 firebird2.5
我通过谷歌做了一些研究,但找不到正确的答案。
我有一个 Firebird 数据库,我总是使用自己的域作为我的表字段。所有这些域都是用字符集 ISO8859_1 定义的。现在我想把它改成UTF8。如果我在 IBExpert 中尝试此操作,它会给我带来以下代码:
ALTER DOMAIN D_CHAR100 TYPE VARCHAR(100) CHARACTER SET UTF8;
Run Code Online (Sandbox Code Playgroud)
此更新有效。但它真的有效吗?所有字符都正确转换了吗,我现在是否已将我的字段更改为“真正的”UTF8??还是在内部保留为 ISO08859_1?
如果我在网上搜索,有人说:
和其他人说:
什么是对的?什么可能出错?我们有很多客户,我想通过脚本转换数据库。
更改字段不会更改该字段内的任何数据。它会给你暴露很多问题。执行此操作的最佳方法是复制数据,但是您还有更多工作要做。
\n\n以下是您会遇到的一些问题:
\n\n尝试一下这两个语句:
\n\nselect cast('\xc2\xbd' as varchar(10) character set ISO8859_1)\nfrom rdb$database\n\nselect cast('\xc2\xbd' as varchar(10) character set UTF8)\nfrom rdb$database\nRun Code Online (Sandbox Code Playgroud)\n\n第一个有效,第二个无效。
\n\n最后,简单地更改该字段将暴露上述四个问题,但是在遇到它们之前您不会知道它们的存在,而在复杂的数据库中,直到生产级别用户遇到它们之前可能不会知道它们的存在。同时,复制数据将为您自己带来更多工作,但将使您能够正确处理上述所有项目。
\n\n还有两点需要注意:
\n\n如果您复制数据,您将收到 #4 的错误。相反,您应该根据需要清理这些数据,并使用可以正确转换这些值的外部应用程序来执行此操作。ASCII 171 = UTF 189 = 1/2 个字符。
针对这些字段执行语句的任何应用程序代码仍然可能违反问题 #3 的 64KB 规则。您需要至少搜索所有较大的字段或语句,以确保不会遇到此问题。
| 归档时间: |
|
| 查看次数: |
2979 次 |
| 最近记录: |