关于MySql链接url参数的设置

本文详细解析了MySQL JDBC连接配置参数,特别是url配置项的深入理解,包括如何启用UTF8MB4字符集、自动重连机制的重要性,以及如何开启批量执行SQL的开关。同时介绍了mysqlJDBCURL的格式和常见参数,如useUnicode、characterEncoding、autoReconnect等,并提供了适用于中文环境的配置示例。

转载地址:https://www.cnblogs.com/softidea/p/5765624.html

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
jdbc.username=root
jdbc.password=password

database.url=jdbc:mysql://database_server:3306/oauth?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC

特别说明其中的jdbc.url配置:如果你已经升级好了mysql-connector,其中的characterEncoding=utf8可以被自动被识别为utf8mb4(当然也兼容原来的utf8),而autoReconnect配置我强烈建议配上,我之前就是忽略了这个属性,导致因为缓存缘故,没有读取到DB最新配置,导致一直无法使用utf8mb4字符集,多么痛的领悟!!

没有让mysql驱动开启批量执行sql的开关。

怎么开启呢?在拼装mysql链接的url时,为其加上allowMultiQueries参数,设置为true,如下:

jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

mysql JDBC URL格式如下:

jdbc:mysql://[host:port],[host:port]…/[database][?参数名1][=参数值1][&参数名2][=参数值2]…

常用的几个较为重要的参数:

参数名称 参数说明 缺省值 最低版本要求
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=utf8&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=utf8&autoReconnect=true&failOverReadOnly
http://www.jb51.net/article/47764.htm

jdbc:mysql://127.0.0.1:3306/demo_ds?useServerPrepStmts=true&cachePrepStmts=true
设置参数useServerPrepStmts=true,这个参数的作用是让MySQL服务进行prepare。没有这个参数就是让JDBC进行prepare,MySQL完全感知不到,是没有什么意义的。
cachePrepStmts=true这个参数的意思是告诉JDBC缓存需要prepare的SQL

https://www.cnblogs.com/softidea/p/9180189.html

<think>我们正在讨论如何配置MySQL数据库连接URL参数。根据引用[1][2][3][4],我们可以总结出以下关键点: 1. **基本格式**:`jdbc:mysql://<host>:<port>/<database>?<参数1>=<值1>&<参数2>=<值2>&...` - 例如:`jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC` 2. **常见参数**: - `useSSL`:是否使用SSL连接。MySQL 5.5.45+、5.6.26+、5.7.6+开始默认要求使用SSL。如果不需要,可以显式设置为`false`(如`useSSL=false`)[^4]。 - `serverTimezone`:设置服务器时区。为了避免时区问题,通常设置为UTC或者你所在时区(如`serverTimezone=UTC`或`serverTimezone=Asia/Shanghai`)[^1]。 - `allowPublicKeyRetrieval`:是否允许从服务器获取公钥。当使用SSL并且出现公钥检索错误时,可以设置为`true`(如`allowPublicKeyRetrieval=true`)[^1]。 - `autoReconnect`:是否自动重新连接(如`autoReconnect=true`)[^3]。 - `characterEncoding`:设置字符编码(如`characterEncoding=utf8`)[^3]。 3. **注意事项**: - 安全性:根据引用[1][4],需要平衡安全性和性能。例如,在测试环境中可以关闭SSL,但在生产环境中建议启用。 - 异常处理:如果出现类似`Public Key Retrieval is not allowed`的异常,可以设置`allowPublicKeyRetrieval=true`[^1]。 **配置示例**: ```java // 示例:连接本地MySQL的test数据库,禁用SSL,设置时区为UTC,允许公钥检索 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"; ``` **详细步骤**: 1. **确定数据库地址和端口**:将`<host>`替换为数据库服务器地址(如`localhost`),`<port>`替换为端口(默认3306)。 2. **指定数据库名**:将`<database>`替换为实际数据库名(如`test`)。 3. **添加必要参数**: - 如果使用MySQL 8.0+且驱动版本较高,必须设置`serverTimezone`。 - 如果出现SSL相关错误,根据环境设置`useSSL`(测试可设`false`,生产建议`true`并配置证书)。 - 如果出现公钥检索错误,设置`allowPublicKeyRetrieval=true`(注意安全风险)[^1][^4]。 4. **其他可选参数**:根据需求添加如字符编码、自动重连等参数。 **安全警告**: - 设置`allowPublicKeyRetrieval=true`可能存在安全风险,仅建议在可信任网络中使用[^1]。 - 生产环境强烈建议启用SSL(`useSSL=true`)并正确配置证书[^4]。 如果您有具体的错误信息或使用场景,可以提供更多细节以便进一步调整配置。</think>### MySQL 数据库连接 URL 参数配置指南 #### 一、基本语法格式 MySQL 连接 URL 的标准格式为: ``` jdbc:mysql://<host>:<port>/<database>?<参数1>=<值1>&<参数2>=<值2>... ``` 示例: ```java String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC"; ``` #### 二、核心参数详解 1. **基础参数** - `host`:数据库服务器地址(如 `localhost` 或 `127.0.0.1`) - `port`:端口号(默认 `3306`) - `database`:数据库名称(如 `testdb`) 2. **安全连接参数** - `useSSL=true/false` 是否启用 SSL 加密连接。MySQL 5.5.45+ 默认要求 SSL,但测试环境可禁用[^4]: ```java useSSL=false // 显式禁用 SSL ``` - `allowPublicKeyRetrieval=true/false` 解决 `Public Key Retrieval is not allowed` 错误[^1]: ```java allowPublicKeyRetrieval=true // 允许获取公钥 ``` 3. **时区配置** - `serverTimezone` 避免时区不一致导致的错误(必填项): ```java serverTimezone=UTC // 协调世界时 serverTimezone=Asia/Shanghai // 中国时区 ``` 4. **连接池优化参数** - `autoReconnect=true/false`:连接断开时自动重连[^3] - `connectTimeout=3000`:连接超时时间(毫秒) - `maxReconnects=5`:最大重连次数 ```java jdbc:mysql://localhost:3306/db?autoReconnect=true&connectTimeout=5000 ``` 5. **字符编码设置** - `characterEncoding=utf8`:指定字符集[^3] - `useUnicode=true`:启用 Unicode 支持 ```java characterEncoding=UTF-8&useUnicode=true ``` #### 三、完整配置示例 生产环境推荐配置: ```java jdbc:mysql://dbserver:3306/prod_db? useSSL=true& requireSSL=true& verifyServerCertificate=true& serverTimezone=UTC& characterEncoding=utf8& connectionTimeout=3000 ``` 开发环境简化配置: ```java jdbc:mysql://localhost:3306/test_db? useSSL=false& allowPublicKeyRetrieval=true& serverTimezone=Asia/Shanghai ``` #### 四、注意事项 1. **安全性平衡** - 生产环境必须启用 `useSSL=true`,测试环境可禁用[^1][^4] - `allowPublicKeyRetrieval=true` 仅在信任网络中使用[^1] 2. **MySQL 8.0+ 特殊要求** - 必须指定 `serverTimezone` - 驱动类名改为 `com.mysql.cj.jdbc.Driver` 3. **参数冲突处理** 避免同时设置冲突参数,如: ```java useSSL=true&requireSSL=false // 错误!requireSSL 应匹配 useSSL ``` > **重要提示**:根据 MySQL 官方建议,高版本(5.5.45+/5.6.26+/5.7.6+)必须显式配置 SSL 选项[^4],未设置时默认要求 SSL 连接,可能导致连接失败。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值