gpt4 book ai didi

sql - Liquibase 目前是如何处理字符编码的?

转载 作者:行者123 更新时间:2023-12-04 14:33:19 25 4
gpt4 key购买 nike

您能解释一下 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 系统属性:

  • 文件编码,
  • liquibase.file.encoding,
  • liquibase.ouputFileEncoding。

然而,这些 Java 系统属性似乎比解析过程更能影响更改的编写过程。

目前,我们的大多数数据库都使用 ISO-8859-1 或 windows-1252,但 Liquibase 似乎只能正确处理 UTF-8 变更集。您对这些问题的回答将对我们的理解有很大帮助

  • 提供了哪些与字符编码相关的特性Liquibase,和
  • 存在哪些限制取决于所使用的变更集格式。

在此先感谢您的帮助,

伯特兰

最佳答案

我认为文件是用 FileSystemResourceAccessor 在 liquibase 中读取的并且没有您可以专门设置的编码。这意味着它将使用底层 Java 将使用的任何内容。 InputStreamReader 将使用默认的系统编码。

所以你应该能够通过设置 JVM 的编码来影响这一点:

-Dfile.encoding=UTF-8 

XML 文件是用 SAX 解析器解析的(也许 SAX 解析器会做更多的事情来识别编码。)

对于 sql 文件格式的变更集,它将使用 UtfBomAwareReader读者。虽然有代码试图识别 UtfBomAwareReader 中的编码我认为 SqlChangeLogParser没有使用它(截至目前),而是默认为“UTF-8”。

据我所知。因此,在您基于此做出重大设计决策之前,请尝试自己验证它。

关于sql - Liquibase 目前是如何处理字符编码的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com