2010-06-14 60 views
19

我在GlassFish 3上運行Java Web應用程序,在MySQL上運行JPA(EclipseLink)。我面臨的問題是,如果我使用update()方法將實體保存到數據庫,則String字段會失去完整性;顯示的是'?',而不是某些字符。JDBC字符編碼

服務器,頁面和數據庫配置爲使用UTF-8

當我發佈表單數據後,下一頁顯示正確的數據。此外,在NetBeans調試中,「似乎」當前實體的String屬性也存儲了正確的值。不知道NetBeans調試是否可信;可能是它解碼正確,但它是不正確的。

+3

什麼是你使用的數據庫和連接字符串? – 2010-06-14 20:47:09

+0

我使用的MySQL和連接字符串是:'jdbc:mysql:// localhost:3306/administer' – 2010-06-14 21:10:36

+0

這是一個鏈接,用於那些想使用utf8mb4的人:http://dev.mysql.com/doc/connector -j/en/connector-j-reference-charsets.html – 2014-10-15 08:28:56

回答

43

這是JDBC,不JPA是確定編碼:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8 
+0

+1謝謝你非常有幫助:) – 2013-10-20 18:08:05

+1

只是爲那些遇到同樣問題的人提供了一個旁註:如果你想在持久化的JDBC url中鏈接參數.xml',你必須將'&'重寫爲'&'。例如:'jdbc:mysql:// localhost:3306/administer?rewriteBatchedStatements = true & characterEncoding = UTF-8' – 2014-08-22 21:02:46

+0

對於新版本的jdbc驅動程序(> = 5.1.13),不要指定「characterEncoding」。看看:http://stackoverflow.com/a/18059663/967062 – 2017-02-07 08:40:20

11

我用下面的解決了這個問題:我用了GlassFish管理界面這個屬性添加到我的連接池的設置:

的characterEncoding = UTF-8

0

我不得不添加了useUnicode =也是如此,所以我不得不與'到Concat的參數「,所以它看起來是這樣的:

jdbc:mysql://127.0.0.1:3306/warranteer?useUnicode=true&characterEncoding=UTF-8 

如果你正在使用maven配置文件設置MySQL的URL,像我一樣,要確保你把&代替&因爲行家UNESCAPE的網址寫persistence.xml文件時到類文件夾。

1

新版本的JDBC驅動程序自動檢測characterEncoding。 您不需要明確設置它。