0

用户在浏览器的 html 表单输入中插入一个字符串。该字符串保存在数据库中。这个字符串是如何在每个阶段基于字符编码进行编码和解码的?

根据所使用的技术堆栈进行流程:浏览器 --> ajax post --> spring mvc -->hibernate -->mysql db

4

1 回答 1

0

您可以预期浏览器帖子是一个 URL 编码的 UTF-8。在 Java JVM 中,字符串使用 UTF-16,因此如果它是英文文本,大小大约会增加一倍。Hibernate 是其中的一部分,它并不真正关心编码,尽管它确实使用连接字符串传递,如下所述(hibernate.connection.url属性)。

UTF-16 字符串然后由 JDBC 驱动程序翻译,在 MySQL 的情况下,它将使用characterEncoding连接字符串中的属性。如果这与语句中CREATE DATABASE声明的数据库的编码相匹配,它会有所帮助,避免再次重新编码。

最后,“latin”不是特定字符集或编码的名称。您可能指的是 ISO 8859-1,也称为 Latin-1。对于 Web 服务器来说,这不是一个好的选择,因为它无法表示大多数非英语字符串。您应该在数据库和连接字符串中使用 UTF-8,以 UTF-8 -> UTF-16 -> UTF-8 结尾,这是一个安全且相当有效的序列(不包括可能在浏览器本身)。

如果您决定更改数据库以使用 UTF-8,请注意更改表级别的编码。每个表都可以使用自己的编码,并且不会自动更改。

于 2012-06-17T22:11:43.877 回答