useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true 等一些Mysql JDBC Url引數說明
MySQL的 JDBC URL 格式 for Connector/J 如下例:
jdbc:mysql://[host][,failoverhost...][:port]/[database] » [?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]... jdbc:mysql://[host:port],[host: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 需要注意的是,在xml配置檔案中,url中的&符號需要轉義成&。比如在tomcat的server.xml中配置資料庫連線池時,mysql jdbc url樣例如下: jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk &autoReconnect=true&failOverReadOnly=false
附錄:URL連線引數表(這個表看不全,最後面有word下載 )
屬性名 |
定義 |
要求? |
預設值 |
版本 |
Connection/Authentication(連線/鑑定) |
||||
user |
連線的使用者 |
No |
全部 |
|
password |
連線時使用的密碼。 |
No |
全部 |
|
socketFactory |
驅動程式用於建立與伺服器套接字連線的類的名稱。該類必須實現了介面“com.mysql.jdbc.SocketFactory”,並有公共無參量建構函式。 |
No |
com.mysql.jdbc.StandardSocketFactory |
3.0.3 |
connectTimeout |
套接字連線的超時(單位為毫秒),0表示無超時。僅對JDK-1.4或更新版本有效。預設值為“0”。 |
No |
0 |
3.0.1 |
socketTimeout |
網路套接字連線的超時(預設值0表示無超時)。 |
No |
0 |
3.0.1 |
useConfigs |
在解析URL屬性或應用使用者指定的屬性之前,載入由逗號“,”分隔的配置屬性列表。在文件的“配置”部分中解釋了這些配置。 |
No |
3.1.5 |
|
interactiveClient |
設定CLIENT_INTERACTIVE標誌,根據INTERACTIVE_TIMEOUT而不是WAIT_TIMEOUT向MySQL通報超時連線。 |
No |
false |
3.1.0 |
propertiesTransform |
com.mysql.jdbc.ConnectionPropertiesTransform的1個實施例項,在嘗試連線之前,驅動程式將使用它來更改傳遞給驅動的URL屬性。 |
No |
3.1.4 |
|
useCompression |
與伺服器進行通訊時採用zlib壓縮(真/假)? 預設值為“假”。 |
No |
false |
3.0.17 |
High Availability and Clustering (高可用性和簇集) |
||||
autoReconnect |
驅 動程式是否應嘗試再次建立失效的和/或死連線? 如果允許,對於在失效或死連線上發出的查詢(屬於當前事務),驅動程式將丟擲異常,但在新事務的連線上發出下一個查詢時,將嘗試再連線。不推薦使用該特 性,這是因為,當應用程式不能恰當處理SQLExceptions時,它會造成與會話狀態和資料一致性有關的副作用,設計它的目的僅用於下述情況,即,當 你無法配置應用程式來恰當處理因死連線和/或無效連線導致的SQLExceptions時。作為可選方式,可將MySQL伺服器變數“wait_timeout”設定為較高的值,而不是預設的8小時。 |
No |
false |
1.1 |
autoReconnectForPools |
使用適合於連線池的再連線策略(預設值為“假”)。 |
No |
false |
3.1.3 |
failOverReadOnly |
在autoReconnect模式下出現故障切換時,是否應將連線設定為“只讀”? |
No |
true |
3.0.12 |
reconnectAtTxEnd |
如果將autoReconnect設定為“真”,在每次事務結束後驅動程式是否應嘗試再連線? |
No |
false |
3.0.10 |
roundRobinLoadBalance |
啟用了autoReconnect而且failoverReadonly為“假”時,是否應按照迴圈方式挑選要連線的主機? |
No |
false |
3.1.2 |
queriesBeforeRetryMaster |
出現故障切換(使用多主機故障切換)並返回主機之前發出的查詢數。無論首先滿足了哪個條件,“queriesBeforeRetryMaster”或“secondsBeforeRetryMaster”,均會再次與主機進行連線。預設值為“50”。 |
No |
50 |
3.0.2 |
secondsBeforeRetryMaster |
出現故障切換後,在嘗試再次連線到主伺服器之前,驅動程式應等待的時間? 無論首先滿足了哪個條件,“queriesBeforeRetryMaster”或“secondsBeforeRetryMaster”,均會再次與主機進行連線。單位為秒,預設值為30。 |
No |
30 |
3.0.2 |
enableDeprecatedAutoreconnect |
自3.2版開始,自動再連線功能受到冷落,在3.3版中將刪除該功能。將該屬性設定為“真”可禁止檢查配置的特性。 |
No |
false |
3.2.1 |
Security (安全) |
||||
allowMultiQueries |
在一條語句中,允許使用“;”來分隔多條查詢(真/假,預設值為“假”)。 |
No |
false |
3.1.1 |
useSSL |
與伺服器進行通訊時使用SSL(真/假),預設值為“假”。 |
No |
false |
3.0.2 |
requireSSL |
要求SSL連線,useSSL=true? 預設值為“假”。 |
No |
false |
3.1.0 |
allowUrlInLocalInfile |
驅動程式在是“LOAD DATA LOCAL INFILE”語句中否允許URL? |
No |
false |
3.1.4 |
paranoid |
採取措施,防止在錯誤資訊中洩漏敏感資訊,並可可能時清除儲存敏感資料的資料結構? 預設值為“假”。 |
No |
false |
3.0.1 |
Performance Extensions (效能擴充套件) |
||||
metadataCacheSize |
如果將cacheResultSetMetaData設定為“真”,對cacheResultSetMetadata的查詢次數(預設值為50)。 |
No |
50 |
3.1.1 |
prepStmtCacheSize |
如果允許預處理語句緩衝功能,應緩衝處理多少條預處理語句? |
No |
25 |
3.0.10 |
prepStmtCacheSqlLimit |
如果允許預處理語句緩衝功能,驅動程式將執行解析緩衝處理的最大SQL是什麼? |
No |
256 |
3.0.10 |
maintainTimeStats |
驅動程式是否應維持各種內部定時器,以允許空閒時間計算,以及與伺服器的連線失敗時允許提供更詳細的錯誤訊息? 將該屬性設定為“假”,對於每次查詢,至少能減少兩次對System.getCurrentTimeMillis()的呼叫。 |
No |
true |
3.1.9 |
blobSendChunkSize |
組塊,當通過ServerPreparedStatements傳送BLOB/CLOB時使用。 |
No |
1048576 |
3.1.9 |
cacheCallableStmts |
驅動程式是否應對CallableStatements的解析過程執行緩衝處理。 |
No |
false |
3.1.2 |
cachePrepStmts |
驅動程式是否應對客戶端預處理語句的PreparedStatements的解析過程執行緩衝處理,是否應檢查伺服器端預處理語句的適用性以及伺服器端預處理語句本身? |
No |
false |
3.0.10 |
cacheResultSetMetadata |
驅動程式是否應對用於Statements和PreparedStatements的ResultSetMetaData執行緩衝處理? 要求 JDK-1.4+,真/假,預設為“假”。 |
No |
false |
3.1.1 |
cacheServerConfiguration |
驅動程式是否應根據每條URL對“HOW VARIABLES”和“SHOW COLLATION”的結果執行緩衝處理? |
No |
false |
3.1.5 |
dontTrackOpenResources |
JDBC規範要求驅動程式自動跟蹤和關閉資源,但是,如果你的應用程式不能明確呼叫作用在語句或結果集上的close(),可能會導致記憶體洩漏。將該屬性設定為“真”,可放寬該限制,對於某些應用程式,會提供更高的記憶體效率。 |
No |
false |
3.1.7 |
dynamicCalendars |
需要時,驅動程式是否應檢索預設日曆,或根據連線/會話對其進行緩衝處理? |
No |
false |
3.1.5 |
elideSetAutoCommits |
如果使用MySQL-4.1或更高版本,當伺服器的狀態與Connection.setAutoCommit(boolean)請求的狀態不匹配時,驅動程式是否僅應發出“set autocommit=n”查詢? |
No |
false |
3.1.3 |
holdResultsOpenOverStatementClose |
驅動程式是否應按照JDBC規範的要求關閉Statement.close()上的結果集? |
No |
false |
3.1.7 |
locatorFetchBufferSize |
如果將“emulateLocators”配置為“真”,當獲取關於getBinaryInputStream的BLOB資料時,緩衝區的大小應是多少? |
No |
1048576 |
3.2.1 |
useFastIntParsing |
是否使用內部“String->Integer”轉換子程式來避免建立過多物件? |
No |
true |
3.1.4 |
useLocalSessionState |
驅動程式是否應引用autocommit的內部值,以及由Connection.setAutoCommit()和Connection.setTransactionIsolation()設定的事務隔離,而不是查詢資料庫? |
No |
false |
3.1.7 |
useNewIO |
驅動程式是否應將java.nio.* interfaces用於網路通訊(真/假),預設為“假”。 |
No |
false |
3.1.0 |
useReadAheadInput |
從伺服器讀取資料時,是否使用較新的、優化的非成組緩衝輸入流? |
No |
true |
3.1.5 |
Debuging/Profiling (除錯/ 仿形) |
||||
logger |
實現了com.mysql.jdbc.log.Log的類的名稱,com.mysql.jdbc.log.Log用於記錄訊息(預設為“com.mysql.jdbc.log.StandardLogger”,它會將日誌記錄到STDERR)。 |
No |
com.mysql.jdbc.log.StandardLogger |
3.1.1 |
profileSQL |
跟蹤查詢以及它們對已配製記錄器的執行/獲取次數(真/假),預設為“假”。 |
No |
false |
3.1.0 |
reportMetricsIntervalMillis |
如果允許“gatherPerfMetrics”,記錄它們的頻率是多少(單位毫秒)? |
No |
30000 |
3.1.2 |
maxQuerySizeToLog |
除錯或仿形時,控制將記錄的查詢的最大長度/大小。 |
No |
2048 |
3.1.3 |
packetDebugBufferSize |
當“enablePacketDebug”為“真”時,需要保留的最大資訊包數目。 |
No |
20 |
3.1.3 |
slowQueryThresholdMillis |
如果允許“logSlowQueries”,在將查詢記錄為“慢”之前的查詢時間是多少(毫秒)? |
No |
2000 |
3.1.2 |
useUsageAdvisor |
驅動程式是否應發出“使用情況”警告,就DBC和MySQL Connector/J的恰當和高效使用給出建議(真/假,預設為“假”)? |
No |
false |
3.1.1 |
autoGenerateTestcaseScript |
驅動程式是否應將正在執行的SQL(包括伺服器端預處理語句)轉儲到STDERR? |
No |
false |
3.1.9 |
dumpQueriesOnException |
驅動程式是否應將傳送至伺服器的查詢內容轉儲到SQLExceptions中? |
No |
false |
3.1.3 |
enablePacketDebug |
允許時,將保留“packetDebugBufferSize”資訊包的環形緩衝區,並當在驅動程式程式碼的關鍵區域丟擲異常時進行轉儲。 |
No |
false |
3.1.3 |
explainSlowQueries |
如果允許了“logSlowQueries”,驅動程式是否應在伺服器上自動發出“EXPLAIN”,並以WARN級別將結果傳送給配置好的日誌? |
No |
false |
3.1.2 |
logSlowQueries |
是否要記錄時間長於“slowQueryThresholdMillis”的查詢? |
No |
false |
3.1.2 |
traceProtocol |
是否應記錄跟蹤級網路協議? |
No |
false |
3.1.2 |
Miscellaneous (其他) |
||||
useUnicode |
處理字串時,驅動程式是否應使用Unicode字元編碼? 僅應在驅動程式無法確定字符集對映,或你正在強制驅動程式使用MySQL不是固有支援的字符集時(如UTF-8)才應使用。真/假,預設為“真”。 |
No |
false |
1.1g |
characterEncoding |
如果“useUnicode”被設定為“真”,處理字串時,驅動程式應使用什麼字元編碼? 預設為“autodetect”。 |
No |
1.1g |
|
characterSetResults |
字符集,用於通知伺服器以何種字符集返回結果。 |
No |
3.0.13 |
|
connectionCollation |
如果設定了它,將通知伺服器通過“set collation_connection”使用該校對。 |
No |
3.0.13 |
|
sessionVariables |
以逗號隔開的“名稱/值”對列表,當驅動程式建立了連線後,以“SET SESSION ...”的方式將其傳送給伺服器。 |
No |
3.1.8 |
|
allowNanAndInf |
驅動程式是否應在PreparedStatement.setDouble()中允許NaN或+/- INF值? |
No |
false |
3.1.5 |
autoDeserialize |
驅動程式是否應自動檢測並串並轉換儲存在BLOB欄位中的物件? |
No |
false |
3.1.5 |
capitalizeTypeNames |
是否將DatabaseMetaData中的型別名轉換為大寫? 通常僅在使用WebObjects時有用,真/假。預設為“假”。 |
No |
false |
2.0.7 |
clobberStreamingResults |
這會使“流式”結果集被自動關閉,如果在所有資料尚未從伺服器中讀取完之前,執行了另一查詢,正在從伺服器流出的任何未完成資料均將丟失。 |
No |
false |
3.0.9 |
continueBatchOnError |
如果一條語句失敗,驅動程式是否應繼續處理批命令? JDBC規範允許任何一種方式(預設為“真”)。 |
No |
true |
3.0.3 |
createDatabaseIfNotExist |
如果不存在,建立URL中給定的資料庫。假定使用者具有建立資料庫的許可權。 |
No |
false |
3.1.9 |
emptyStringsConvertToZero |
驅動程式是否應允許從空字串欄位到數值“0”的轉換? |
No |
true |
3.1.8 |
emulateLocators |
N/A |
No |
false |
3.1.0 |
emulateUnsupportedPstmts |
驅動程式是否應檢測不被伺服器支援的預處理語句,並用客戶端模擬版替換它們? |
No |
true |
3.1.7 |
ignoreNonTxTables |
是否忽略關於回退的非事務表? 預設值為“假”。 |
No |
false |
3.0.9 |
jdbcCompliantTruncation |
連線到支援告警的伺服器時(MySQL 4.1.0和更高版本),當按照JDBC的要求截短資料時,驅動程式是否應丟擲java.sql.DataTruncation異常? |
No |
true |
3.1.2 |
maxRows |
返回的最大行數(0,預設值表示返回所有行)。 |
No |
-1 |
all versions |
noDatetimeStringSync |
不保證ResultSet.getDatetimeType().toString().equals(ResultSet.getString()。 |
No |
false |
3.1.7 |
nullCatalogMeansCurrent |
當DatabaseMetadataMethods請求“目錄”引數時,值“Null”是否意味著使用當前目錄? 它不相容JDBC,但符合驅動程式早期版本的傳統行為。 |
No |
true |
3.1.8 |
nullNamePatternMatchesAll |
接受*pattern引數的DatabaseMetaData方法是否應將null按對待“%”的相同方式處理(不相容JDBC,但驅動程式的早期版本能接受與規範的這類偏離)。 |
No |
true |
3.1.8 |
pedantic |
嚴格遵守JDBC規範。 |
No |
false |
3.0.0 |
relaxAutoCommit |
如果驅動程式所連線的MySQL伺服器的版本不支援事務,仍允許呼叫commit()、rollback()和setAutoCommit()?真/假,預設為“假”。 |
No |
false |
2.0.13 |
retainStatementAfterResultSetClose |
呼叫ResultSet.close()後,驅動程式是否應將語句引用儲存在結果集中? 在JDBC-4.0後,與JDBC不相容。 |
No |
false |
3.1.11 |
rollbackOnPooledClose |
當連線池中的邏輯連線關閉時,驅動程式是否應發出rollback()? |
No |
true |
3.0.15 |
runningCTS13 |
允許在Sun與JDBC相容的testsuite 1.3版中處理缺陷。 |
No |
false |
3.1.7 |
serverTimezone |
覆蓋時區的檢測/對映。當伺服器的時區為對映到Java時區時使用。 |
No |
3.0.2 |
|
strictFloatingPoint |
僅在相容性測試的早期版本中使用。 |
No |
false |
3.0.0 |
strictUpdates |
驅動程式是否應對可更新結果集進行嚴格檢查(選擇所有的主鍵)?真/假,預設為“真”。 |
No |
true |
3.0.4 |
tinyInt1isBit |
驅動程式是否應將資料型別TINYINT(1)當作BIT型別對待?建立表時,伺服器會執行BIT -> TINYINT(1)操作。 |
No |
true |
3.0.16 |
transformedBitIsBoolean |
如果驅動程式將TINYINT(1)轉換為不同的型別,為了與MySQL-5.0相容,驅動程式是否應使用BOOLEAN取代BIT?這是因為MySQL-5.0具有BIT型別。 |
No |
false |
3.1.9 |
ultraDevHack |
由於UltraDev已損壞,併為所有語句發出了prepareCall(),需要時,是否要為prepareCall()建立PreparedStatements? 真/假,預設值為“假”。 |
No |
false |
2.0.3 |
useHostsInPrivileges |
在DatabaseMetaData.getColumn/TablePrivileges()中為使用者新增“@hostname”。真/假,預設為“真”。 |
No |
true |
3.0.2 |
useOldUTF8Behavior |
與4.0和更早版本的伺服器進行通訊時,使用UTF-8。 |
No |
false |
3.1.6 |
useOnlyServerErrorMessages |
對伺服器返回的錯誤訊息,不事先設定“標準的”SQLState錯誤訊息。 |
No |
true |
3.0.15 |
useServerPrepStmts |
如果伺服器支援,是否使用伺服器端預處理語句? 預設值為“真”。 |
No |
true |
3.1.0 |
useSqlStateCodes |
使用SQL標準狀態碼取代“傳統的”X/Open/SQL狀態碼,真/假,預設為“真”。 |
No |
true |
3.1.3 |
useStreamLengthsInPrepStmts |
是否採用PreparedStatement/ResultSet.setXXXStream()方法呼叫中的流長度引數?真/假,預設為“真”。 |
No |
true |
3.0.2 |
useTimezone |
是否在客戶端和伺服器時區間轉換時間/日期型別(真/假,預設為“假”)? |
No |
false |
3.0.2 |
useUnbufferedInput |
不使用BufferedInputStream來從伺服器讀取資料。 |
No |
true |
3.0.11 |
yearIsDateType |
JDBC驅動程式是否應將MySQL型別“YEAR”當作java.sql.Date或SHORT對待? |
No |
true |
3.1.9 |
zeroDateTimeBehavior |
當驅動程式遇到全由0組成的DATETIME值時,應出現什麼?MySQL使用它來表示無效日期。有效值是“exception”、“round”和“convertToNull”。 |
No |
原文轉載:http://elf8848.iteye.com/blog/1684414