用户在浏览器的html表单输入中插入字符串。该字符串保存在数据库中。如何根据字符编码在每个阶段对此字符串进行编码和解码?
按照所使用的技术堆栈流程:浏览器 - > ajax post - > spring mvc - > hibernate - > mysql db
答案 0 :(得分:0)
您可以预期浏览器帖子是URL编码的UTF-8。在Java JVM中,字符串使用UTF-16,因此如果它是英文文本,则大致加倍。 Hibernate是其中的一部分,它并不真正关心编码,尽管它确实传递了连接字符串,如下所述(hibernate.connection.url
属性)。
然后由JDBC驱动程序转换UTF-16字符串,在MySQL的情况下,它将使用连接字符串中的characterEncoding
属性。如果这与CREATE DATABASE
语句中声明的数据库的编码匹配,则会有所帮助,从而避免另一次重新编码。
最后,“latin”不是特定字符集或编码的名称。您可能意味着ISO 8859-1,也称为Latin-1。对于Web服务器而言,这不是一个好的选择,因为它无法表示大多数非英语字符串。您应该在数据库和连接字符串中使用UTF-8,最后是UTF-8 - > UTF-16 - > UTF-8是一种安全且合理有效的序列(不包括浏览器本身可能发生的任何编码)。
如果您决定更改数据库以使用UTF-8,请注意在表级别更改编码。每个表都可以使用自己的编码,并且不会自动更改。