【发布时间】:2015-04-13 09:26:52
【问题描述】:
您能否解释一下 Liquibase(例如 3.3.2 版)当前如何处理字符编码?
1/ XML 格式的变更集以 UTF-8 声明。但是,某些更改可以直接在 XML 中内联声明(例如“sql”),而其他更改可以直接从外部文件导入(例如“sqlFile”)。
对于第一个(内联),您能否确认这些更改显然必须采用与 XML 变更集相同的字符编码(因此只有 UTF-8)? 是否可以更改与 UTF-8 不同的字符编码? 如果是这样,那么是否必须在 XML 声明中设置特定编码(例如 encoding="ISO-8859-1")而不是 UTF-8 ? 最后,我们如何通知 Liquibase 这些变更集应该使用特定的编码(例如 Java 系统属性)进行解析?
对于第二个(作为文件导入),您能否确认这些更改可以设置为 UTF-8 以外的另一种字符编码? 如果是这样,您能否确认我们必须将这些更改的“编码”属性设置为适当的字符编码? 那么我们是否可以将 XML 变更集声明为 UTF-8,但更改集以不同的字符编码(例如 encoding="ISO-8859-1")? 最后,我们是否需要以任何方式通知 Liquibase 以解析特定编码中的变更集(例如 Java 系统属性)?
2/ SQL 格式的变更集也是另一回事。无法在这些文件中设置任何元数据来通知 Liquibase 在解析这些文件时使用哪种字符编码。
Liquibase 使用什么字符编码来解析这些文件? UTF-8 或任何其他字符编码? 是否可以更改与 UTF-8 不同的字符编码? 如果是这样,如何声明它以及我们如何告知 Liquibase 用于解析这些文件的字符编码(例如 Java 系统属性)?
据我所知,使用 Liquibase 可以设置几个 Java 系统属性:
- file.encoding,
- liquibase.file.encoding,
- liquibase.ouputFileEncoding.
然而,这些 Java 系统属性似乎比解析过程更能影响更改的编写过程。
目前,我们的大多数数据库都使用 ISO-8859-1 或 windows-1252,但 Liquibase 似乎只能正确处理 UTF-8 变更集。您对这些问题的回答将帮助我们了解很多
- 与字符编码相关的功能由 Liquibase,以及
- 存在哪些限制取决于所使用的 变更集格式。
提前感谢您的帮助,
伯特兰
【问题讨论】:
标签: sql encoding liquibase changeset