在创建连接池的时候需要设置一些属性
实例
var pool = mysql.createPool({
host : 'locahost', // 主机名
port : 3306, // 数据库连接的端口号 默认是3306
database : 'xxx', // 需要查询的数据库
user : 'xxx', // 用户名
password : 'xxx', // 密码,我的密码是空。所以是空字符串
connectionLimit : 1000, //连接数
timezone: '08:00', //时区配置
charset:'utf8mb4', //字符集设置
});
- host 连接数据库所在的主机名. (默认: localhost)
- port 连接端口. (默认: 3306)
- localAddress 用于TCP连接的IP地址. (可选)
- socketPath 链接到unix域的路径。在使用host和port时该参数会被忽略.
- user MySQL用户的用户名.
- password MySQL用户的密码.
- database 链接到的数据库名称 (可选).
- charset 连接的字符集. (默认: ‘UTF8_GENERAL_CI’.设置该值要使用大写!)
- timezone 储存本地时间的时区. (默认: ‘local’)
- stringifyObjects 是否序列化对象. See issue #501. (默认: ‘false’)
- insecureAuth 是否允许旧的身份验证方法连接到数据库实例. (默认: false)
- typeCast 确定是否讲column值转换为本地JavaScript类型列值. (默认: true)
- queryFormat 自定义的查询语句格式化函数.
- supportBigNumbers 数据库处理大数字(长整型和含小数),时应该启用 (默认: false).
- bigNumberStrings 启用 supportBigNumbers和bigNumberStrings 并强制这些数字以字符串的方式返回(默认: false).
- dateStrings 强制日期类型(TIMESTAMP, DATETIME, DATE)以字符串返回,而不是一javascript Date对象返回. (默认: false)
- debug 是否开启调试. (默认: false)
- multipleStatements 是否允许在一个query中传递多个查询语句. (Default: false)
- flags 链接标志.
遇到的问题
连接数问题
连接池默认是限制10条连接数,超过不予连接,所以需要做好每一条连接的回收工作;
当你使用getConnection(function(err,connection){})进行获取连接后,在用完连接后需要使用connection.release()进行返还连接,将连接不还给连接池,如果返还连接,最多连接10条就会崩溃。
一般同时请求的用户可能超过10个,不设置连接数使用默认十条就会崩溃,所以需要设置连接数;
设置方法:设置属性时设置connectionLimit :1000就可以了
时区问题
如果出现了存入时间和取出时间不同的可能就是出现了时区问题;
设置属性timezone: '08:00’,用于中国时区
数据库存储emoji表情符号问题
首先设置数据库的字符集为utf8mb4
其次在连接池的属性中设置字符集配置charset:'utf8mb4’