使用JDBC中的出現的亂碼和查詢無結果問題
使用JDBC中的問題
- 連接的後出現查詢結果是亂碼。
1.可能是代碼的編碼與數據庫的編碼不同
? 有可以將二者都設置為UTF-8
2.如果比較懶得話可以只設代碼為UTF-8
mysql 連接url中useUnicode=true&characterEncoding=UTF-8 的作用
添加的作用是:指定字符的編碼、解碼格式。
? 例如:mysql數據庫用的是gbk編碼,而項目數據庫用的是utf-8編碼。這時候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那麽作用有如下兩個方面:
1. 存數據時:
? 數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,然後再將解碼後的字節碼重新使用GBK編碼存放到數據庫中。
2.取數據時:
? 在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然後再將解碼後的字節碼重新按UTF-8格式編碼數據,最後再將數據返回給客戶端。
註意:在xml配置文件中配置數據庫utl時,要使用&的轉義字符也就是&
? 例如:
jdbc:mysql://[host][,failoverhost...][:port]/[database] ?[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
實例:
jdbc:mysql://localhost:3306/sakila?profileSQL=true
現只列舉幾個重要的參數,如下表所示:
參數名稱 參數說明 缺省值 最低版本要求 user 數據庫用戶名(用於連接數據庫) 所有版本 password 用戶密碼(用於連接數據庫) 所有版本 useUnicode 是否使用Unicode字符集,如果參數characterEncoding設置為gb2312或gbk,本參數值必須設置為true false 1.1g characterEncoding 當useUnicode設置為true時,指定字符編碼。比如可設置為gb2312或gbk false 1.1g autoReconnect 當數據庫連接異常中斷時,是否自動重新連接? false 1.1 autoReconnectForPools 是否使用針對數據庫連接池的重連策略 false 3.1.3 failOverReadOnly 自動重連成功後,連接是否設置為只讀? true 3.0.12 maxReconnects autoReconnect設置為true時,重試連接的次數 3 1.1 initialTimeout autoReconnect設置為true時,兩次重連之間的時間間隔,單位:秒 2 1.1 connectTimeout 和數據庫服務器建立socket連接時的超時,單位:毫秒。 0表示永不超時,適用於JDK 1.4及更高版本 0 3.0.1 socketTimeout socket操作(讀寫)超時,單位:毫秒。 0表示永不超時 0 3.0.1
對應中文環境,通常mysql連接URL可以設置為:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false
在使用數據庫連接池的情況下,最好設置如下兩個參數:
autoReconnect=true&failOverReadOnly=false
mysql sql語句別名不生效問題: useOldAliasMetadataBehavior
為增強可讀性指定別名
有相同名字的時候用別名區分
需要被聯查多次的時候用別名區分
實例:
jdbc:mysql://localhost/openemm?useUnicode=yes&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true
其中:dbc: mysql://localhost/openemm?這個代表數據庫鏈接地址,
useUnicode=yes&characterEncoding=UTF-8這個代表允許用戶自己設定數據庫編碼,而且設置成UTF-8
useOldAliasMetadataBehavior=true這個代表數據庫裏面允許有別名
連接後再數據庫中查詢不到數據
明明數據庫內有符合條件的數據,但是就是無法查詢到?可能是犯了以一個低級的錯誤。
數據庫內盡量不要使用nchar()這種格式,因為固定了位數,當數據的位數不夠的時候就會使用空字符來占位。如:
name nchar(10) -->施維新
使用String輸出時,會看到施維新□□□□□□□
同時nchar()格式會比較浪費空間,如無必要,不建議使用。
使用JDBC中的出現的亂碼和查詢無結果問題