String 字符串数据流,编码和解码从浏览器到mysql数据库,反之亦然
用户在浏览器上输入的html表单中插入字符串。此字符串保存在数据库中。如何在基于字符编码的每个阶段对该字符串进行编码和解码String 字符串数据流,编码和解码从浏览器到mysql数据库,反之亦然,string,character-encoding,String,Character Encoding,用户在浏览器上输入的html表单中插入字符串。此字符串保存在数据库中。如何在基于字符编码的每个阶段对该字符串进行编码和解码 按照使用的技术堆栈流动:浏览器-->ajax post-->spring mvc-->hibernate-->mysql db您可以预期浏览器post是URL编码的UTF-8。在JavaJVM中,字符串使用UTF-16,因此,如果是英文文本,则其大小大致翻了一番。Hibernate就是其中的一部分,它并不真正关心编码,尽管它确实使用连接字符串传递,如下所述(Hibernat
按照使用的技术堆栈流动:浏览器-->ajax post-->spring mvc-->hibernate-->mysql db您可以预期浏览器post是URL编码的UTF-8。在JavaJVM中,字符串使用UTF-16,因此,如果是英文文本,则其大小大致翻了一番。Hibernate就是其中的一部分,它并不真正关心编码,尽管它确实使用连接字符串传递,如下所述(
Hibernate.connection.url
property)
然后,UTF-16字符串由JDBC驱动程序翻译,对于MySQL,JDBC驱动程序将在连接字符串中使用characterEncoding
属性。如果这与CREATE database
语句中声明的数据库编码匹配,则会有帮助,从而避免再次重新编码
最后,“latin”不是特定字符集或编码的名称。你可能是指ISO 8859-1,也称为拉丁语-1。对于web服务器来说,这不是一个好的选择,因为它不能表示大多数非英语字符串。您应该在数据库和连接字符串中使用UTF-8,最后使用UTF-8->UTF-16->UTF-8,这是一个安全且合理有效的序列(不包括浏览器本身可能发生的任何编码)
如果您决定将数据库更改为使用UTF-8,那么也要注意在表级别更改编码。每个表都可以使用自己的编码,并且不会自动更改。Q:是什么让您认为有任何隐式编码/解码正在进行?我们可以在MySQL上指定字符编码。假设我指定拉丁语。那么编码和解码是如何在这一层发生的呢。Html表单可以使用application/x-www-form-urlencoded提交数据,spring mvc是否在将值转换为java控制器代码之前对其进行解码?谢谢您的精彩回答。我理解你不使用拉丁语-1的原因。但假设db具有字符编码拉丁1。在本例中,JDBC驱动程序将Java UTF-16字符转换为拉丁语-1编码并传递到数据库。这是否意味着hibernate连接url上指定的编码应该与MySQL服务器上定义的字符编码相同?@SanjeevKumarDangi-JDBC驱动程序通常能够从数据库中自动检测编码。如果您想覆盖连接字符串中的自动检测,那么是的,我希望您会尝试匹配数据库服务器使用的编码,以尽量减少某种数据丢失。例如,如果数据库使用与其中相关表不同的编码,则可能需要强制使用与表匹配的编码。