mysql修改7tf8mb4_更改MySQL数据库的编码为utf8mb4
utf-8 编码可能2个字节、3个字节、4个字节的字符,但是 MySQL 的 utf8 编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用 utf-8 编码的数据库中插入表情数据,Java 程序中将报SQL异常:
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
可以对4字节的字符进行编码存储,然后取出来的时候,再进行解码。但是这样做会使得任何使用该字符的地方都要进行编码与解码。
utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。
采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。
更改数据库的编码为utf8mb4:
1. MySQL的版本
utf8mb4 的最低 MySQL 版本支持版本为 5.5.3+,若不是,请升级到较新版本。
2. MySQL驱动
5.1.34 可用,最低不能低于 5.1.13
3. 修改MySQL配置文件
修改 MySQL 配置文件 my.cnf(windows为my.ini)
my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
4. 重启数据库,检查变量
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
Variable_name
Value
character_set_client
utf8mb4
character_set_connection
utf8mb4
character_set_database
utf8mb4
character_set_filesystem
binary
character_set_results
utf8mb4
character_set_server
utf8mb4
character_set_system
utf8
collation_connection
utf8mb4_unicode_ci
collation_database
utf8mb4_unicode_ci
collation_server
utf8mb4_unicode_ci
collation_connection 、collation_database 、collation_server是什么没关系,但必须保证:
系统变量
描述
character_set_client
(客户端来源数据使用的字符集)
character_set_connection
(连接层字符集)
character_set_database
(当前选中数据库的默认字符集)
character_set_results
(查询结果字符集)
character_set_server
(默认的内部操作字符集)
这几个变量必须是utf8mb4。
5. 数据库连接的配置
数据库连接参数中:
characterEncoding=utf8 会被自动识别为 utf8mb4,也可以不加这个参数,会自动检测。
而 autoReconnect=true 是必须加上的。
6. 将数据库和已经建好的表也转换成utf8mb4
更改数据库编码:
ALTER DATABASE caitu99 CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`;
更改表编码:
ALTER TABLE `TABLE_NAME` CONVERT TO CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`;
如有必要,还可以更改列的编码
可以写代码批量进行转换:
//获取所有表
Connection conn = null;
try {
conn = DbUtilsTool.openConn("MySQL", "127.0.0.1", "3306", "caitu99", "root", "root");
String sql = "show tables";
QueryRunner qr = new QueryRunner();
List tblNameList= (List) qr.query(conn, sql, new ColumnListHandler(1));
sql = "ALTER DATABASE caitu99 CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`";
qr.update(conn,sql);
for (String str:tblNameList) {
sql = "ALTER TABLE "+str+" CONVERT TO CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`";
qr.update(conn,sql);
}
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
finally {
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
DbUtilsTool类:
package com.mysql.chartest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
public class DbUtilsTool {
private static final QueryRunner runner = new QueryRunner();
/* 打开数据库连接(type: MySQL,Oracle,SQLServer) */
public static Connection openConn(String type, //数据库类型
String host, //主机ip
String port, //主机端口
String name, //数据库名
String username, //用户名
String password)//密码
{
Connection conn = null;
try {
String driver;
String url;
if (type.equalsIgnoreCase("MySQL")) {
driver = "com.mysql.jdbc.Driver";
url = "jdbc:mysql://" + host + ":" + port + "/" + name;
} else if (type.equalsIgnoreCase("Oracle")) {
driver = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@" + host + ":" + port + ":" + name;
} else if (type.equalsIgnoreCase("SQLServer")) {
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
url = "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + name;
} else {
throw new RuntimeException();
}
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/* 关闭数据库连接 */
public static void closeConn(Connection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/* 查询(返回Array结果) */
public static Object[] queryArray(Connection conn, String sql, Object... params) {
Object[] result = null;
try {
result = runner.query(conn, sql, new ArrayHandler(), params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询(返回ArrayList结果) */
public static List queryArrayList(Connection conn, String sql, Object... params) {
List result = null;
try {
result = runner.query(conn, sql, new ArrayListHandler(), params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询(返回Map结果) */
public static Map queryMap(Connection conn, String sql, Object... params) {
Map result = null;
try {
result = runner.query(conn, sql, new MapHandler(), params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询(返回MapList结果) */
public static List> queryMapList(Connection conn, String sql, Object... params) {
List> result = null;
try {
result = runner.query(conn, sql, new MapListHandler(), params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询(返回Bean结果) */
public static T queryBean(Class cls, Map map, Connection conn, String sql, Object... params) {
T result = null;
try {
if (map != null) {
result = runner.query(conn, sql, new BeanHandler(cls, new BasicRowProcessor(new BeanProcessor(map))), params);
} else {
result = runner.query(conn, sql, new BeanHandler(cls), params);
}
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询(返回BeanList结果) */
public static List queryBeanList(Class cls, Map map, Connection conn, String sql, Object... params) {
List result = null;
try {
if (map != null) {
result = runner.query(conn, sql, new BeanListHandler(cls, new BasicRowProcessor(new BeanProcessor(map))), params);
} else {
result = runner.query(conn, sql, new BeanListHandler(cls), params);
}
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询指定列名的值(单条数据) */
public static T queryColumn(String column, Connection conn, String sql, Object... params) {
T result = null;
try {
result = runner.query(conn, sql, new ScalarHandler(column), params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询指定列名的值(多条数据) */
public static List queryColumnList(String column, Connection conn, String sql, Object... params) {
List result = null;
try {
result = runner.query(conn, sql, new ColumnListHandler(column), params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 查询指定列名对应的记录映射 */
public static Map> queryKeyMap(String column, Connection conn, String sql, Object... params) {
Map> result = null;
try {
result = runner.query(conn, sql, new KeyedHandler(column), params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/* 更新(包括UPDATE、INSERT、DELETE,返回受影响的行数) */
public static int update(Connection conn, String sql, Object... params) {
int result = 0;
try {
result = runner.update(conn, sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
mysql修改7tf8mb4_更改MySQL数据库的编码为utf8mb4相关推荐
- 修改mysql用utf8mb4_更改MySQL数据库的编码为utf8mb4
原文:http://blog.csdn.net/woslx/article/details/49685111 utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3 ...
- mysql修改数据库编码mb4_更改MySQL数据库的编码为utf8mb4
utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符.如果直接往采用utf-8编码的数据库中插入表情数据,Java程 ...
- mysql 更改数据库编码_更改MySQL数据库的编码为utf8mb4
utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符.如果直接往采用utf-8编码的数据库中插入表情数据,Java程 ...
- mysql改utf8mb4后速度慢_更改MySQL数据库的编码为utf8mb4
更改MySQL数据库的编码为utf8mb4 utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符. 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑微信昵称 ...
- 更改MySQL数据库的编码为utf8mb4
utf-8编码可能1个字节.2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持最多3字节的数据,也就是说mysql最开始的时候,对utf-8的支持是不完整的.而emoji表情字符是 ...
- mysql修改服务器ip,mysql数据库修改服务器ip
mysql数据库修改服务器ip 内容精选 换一换 云数据库RDS服务上的MySQL在使用上有一些固定限制,用来提高实例的稳定性和安全性,具体详见表1. 云数据库RDS服务支持开启公网访问功能,通过弹性 ...
- mysql 修改字段注释_MySQL数据库+命令大全,人手一份的实操攻略来啦
有很多朋友虽然安装好了MySQL但却不知如何使用它.在这篇文章中我们就从连接MySQL.修改密码.增加用户等方面来学习一些MySQL的常用命令,再看看MySQL在数据库方面的操作是如何执行的. 连接M ...
- mysql修改数据列_MySQL数据库修改一列内容
匿名用户 1级 2018-07-05 回答 下面列出: 1.增加一个字段 alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加 ...
- mysql 修改表 引擎,mysql如何修改表类型(表引擎)
参考阅读:http://www.manongjc.com/article/1205.html 最近遇到一个修改 MySQL 表类型的问题,以前在 phpmyadmin 管理 mysql 数据库时,建立 ...
最新文章
- springBoot 打war包 程序包com.sun.istack.internal不存在的问题
- matlab 算法集锦
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
- springcloud 注解 @EnableDiscoveryClient 与 @EnableEurekaClient 的区别
- android 打印机列表中,在android中打印只搜索打印机
- Python求最大公约数和最小公倍数
- Axure经典实例高保真交互下载(微信元件高保真交互库+微信原型交互+安卓设备模板含登录注册引导欢迎流程+ios苹果设备模板)
- 咸菜可以吃吗,对健康有害吗?
- 创建数据库是列名无效咋办_linux中sqlite3数据库的移植和使用(入门篇)
- 2021华为机考笔试题
- 用python做生信_1 python生信入门
- 重启计算机有什么用,强制重启电脑有什么危害
- word---尾注法插入参考文献
- java判断子串重复_判断字符串是否是由子串重复多次构成
- [Azure][Event hub]Kafka无法同时连接到同一个namespace下的两个Event hub
- 一道经典的面试题:一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱,一个农夫用100块钱买100只鸡(编写java程序)...
- Possible missing firmware /lib/firmware/rtl_nic/rtl8168fp-3.fw for module r8169
- HTTP和RTSP简介
- 云服务器和真实服务器,个人网站主机选择原则 看配置也要看是不是有助于优化...
- 低通滤波器计算截止评率_技术货:滤波器带宽及对应RC的计算