2014-09-18 88 views
-2

我最近将我的latin1数据库转换为utf8。我所有的排序规则和连接属性都设置为utf8,我也使用& useUnicode作为mysql驱动程序url。Java编码,与数据库的连接

问题是,因为Java在utf16中存储字符串,我是否需要做一些转换,或者驱动程序是否将其从utf16转换为utf8进行连接,以及其他方式吗? 我一般会问,但也适用于我们目前使用的spring jdbc。

编辑: 可以说用户输入任何类型的字符串,不管它是什么编码,它是一个swing JTextField。 Java接受它,将其转换为utf16并存储它。如果我告诉我的jdbc驱动程序,我将发送的所有数据都已经是utf8,并且它不应该转换,那么这是如何工作的。 当然,我做了测试,它工作得很好,但为什么?

+2

你为什么不试试并告诉我们? :) – 2014-09-18 22:52:38

+0

这太好了,以至于......所以我最好问一下:) – JavaDesire 2014-09-18 22:57:23

+0

java不会在UTF-16中“存储”字符串,它将字符作为Unicode操作,内部表示形式无关紧要,您告诉它它如何将它们“存储”在外部。您将其保留至您选择的默认值。大多数人将它们作为UTF-8在外部呈现。 – 2014-09-18 23:07:53

回答

0

utf16和utf8之间的转换是双向的。所以我不认为你需要做任何转换,只要你尽可能在java代码中指定'read this as utf8'即可。如果你从数据库中读取一个原始字符串,你可能不需要指定,当你的数据库检测到编码时,你的驱动程序/ ORM应该采取这种方式。