详解JDBC对Mysql utf8mb4字符集的处理
写在前面
在开发微信小程序的时候,评论服务模块希望添加上emoji表情,但是emoji表情是4个字节长度的,所以需要进行设置
当前项目是JAVA编写, 使用JDBC连接操作数据库, 如下针对的JDBC操作的解决方案
一.JDBC的URL的正常操作
jdbc.url=jdbc:mysql://HOST:3306/your_database?useUnicode=true&characterEncoding=utf8&useSSL=false
在连接配置中,声明UTF-8的字符编码,
但是现在需要存储emoji表情,所以在存储emoji字符串时会报错.
二.重新配置为emoji表情的utf8mb4字符集类型
jdbc.url=jdbc:mysql://HOST:3306/your_database?useUnicode=true&characterEncoding=utf8mb4&useSSL=false
报错:客户端连接时报错,不支持该字符集
上述问题的解决方案
三.URL连接配置改成
jdbc.url=jdbc:mysql://HOST:3306/your_database?useSSL=false
同时数据库配置文件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
重启服务MySQL服务
问题到此解决
ps:假如你使用的是Docker运行的mysql,你想找到my.cnf文件的话,
步骤如下:
1.进入mysql容器
docker exec -it 随机的容器名(或者容器ID) bash
2.find / -name my.cnf
通常在:/etc/mysql/my.cnf
3.需要更改这个文件,新增上面的信息
我这里的操作是使用 >> 进行追加
cd /etc/mysql echo [client] >> my.cnf
这样一行一行的进行追加(因为好像容器里没有vi这个命令)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
全面了解mysql中utf8和utf8mb4的区别
一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换.当然,为了节省空间,一般情况下使用utf8也就够了. 二.内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了.三个字节的 UT
-
mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】
本文实例分析了mysql存储emoji表情报错的处理方法.分享给大家供大家参考,具体如下: 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
-
设置mysql5.7编码集为utf8mb4的方法
最近遇到一个问题,移动端的表情或者一些emoji是4字节的,但是utf-8是3字节的,查了很多网上的解决方法,最后提供一套自己的解决方案.如果当前的困境是:自己的mysql版本为5.5.3以前(版本为5.5.3以前将不能使用utf-8mb4编码),需要重装更高版本的mysql,然后获得该编码. 1,检查自己当前数据库版本 使用命令: select version(); 如果发现当前的数据库版本在5.5.3以前,则需要重装数据库,如果在该版本之后跳过第二步和第三步. 2,备份当前数据库中的数据 这
-
Spring Data Jpa Mysql使用utf8mb4编码的示例代码
1 问题:数据库字符集和排序规则不一致 最近需要向一个已有的数据库进行扩充(已有数据库是由PHP建的,后来由Java进行扩展),但是出现了新表和旧表无法建立外键的问题,后来发现是因为编码问题,服务器数据库和我本地数据库的字符集和排序规则不对应,服务器数据库使用的是utf8mb4,utf8mb4_unicode_ci而我本地使用的是utf8,utf8_general_ci. 2 解决方法 2.1 将本地数据库改成utf8mb4,utf8mb4_unicode_ci 该方法参考: 更改MySQL数据
-
详解JDBC对Mysql utf8mb4字符集的处理
写在前面 在开发微信小程序的时候,评论服务模块希望添加上emoji表情,但是emoji表情是4个字节长度的,所以需要进行设置 当前项目是JAVA编写, 使用JDBC连接操作数据库, 如下针对的JDBC操作的解决方案 一.JDBC的URL的正常操作 复制代码 代码如下: jdbc.url=jdbc:mysql://HOST:3306/your_database?useUnicode=true&characterEncoding=utf8&useSSL=false 在连接配置中,声明UTF-8
-
详解JDBC数据库链接及相关方法的封装
详解JDBC数据库链接及相关方法的封装 使用的是MySQL数据库,首先导入驱动类,然后根据数据库URL和用户名密码获得数据的链接.由于使用的是MySQL数据库,它的URL一般为,jdbc:mysql://主机地址:端口号/库名. 下面是封装的具体类,用到了泛型和反射,不过还存在些问题,就是对使用的泛型对象有些限制,只能用于泛型类对象属性名与数据库表中列名相同的对象,而且初始化对象的方法必须为set+属性名的方法.本来想通过返回值类型,参数列表来确定该属性初始化方法的,然而可能是目前学到的还是太少
-
详解监听MySQL的binlog日志工具分析:Canal
Canal是阿里巴巴旗下的一款开源项目,利用Java开发.主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL. GitHub地址:https://github.com/alibaba/canal 在介绍Canal内部原理之前,首先来了解一下MySQL Master/Slave同步原理: MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过sho
-
详解java连接mysql数据库的五种方式
第一种方式:将用户名和密码封装在Properties类中 首先,导入数据库连接包这个是毋庸置疑的.创建一个jdbc驱动dirver.将数据库(以MySQL为例)的url保存在所创建的字符串url中.如果mysql版本低于8.0,则url保存形式应该为: String url = "jdbc:mysql://localhost:3306/test" 如果mysql版本为8.0版本或以上,url保存形式为: String url = "jdbc:mysql://localhost
-
一文详解PHP连接MySQL数据库的三种方式
目录 1.MySQL扩展 2.mysqli扩展 3.PDO扩展 知识点补充 PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO). 1.MySQL扩展 PHP 的 MySQL 扩展是设计开发允许 PHP 应用与 MySQL 数据库交互的早期扩展.MySQL 扩展提供了一个面向过程的接口,由于不支持后期MySQL服务端提供的一些特性.且太古老,又不安全,所以已被后来的 mysqli 完全取代: 使用方式如下 //自 PHP
-
详解如何修改MySQL最大连接数
修改 MySQL 最大连接数 JDBC 操作MySQL数据库的时候 遇到这行报错 很明显 是数据库连接数超限了修改MySQL数据库连接数 具体操作如下 查看 MySQL 数据库当前默认支持最大连接数 show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connect
-
详解JDBC的概念及获取数据库连接的5种方式
目录 一.JDBC概念 二.JDBC获取数据库连接的5种方式 方式一 方式二 方式三 方式四 方式五 一.JDBC概念 Java DataBase Connectivity(Java数据库连接技术) 它是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口(API-它是一种可用于执行SQL语句的JavaAPI,即由一组用Java语言编写的类与接口所组成) JDBC的设计目的: 它是一种规范,设计出来的主要目的是为了让各个数据库开发商为Java程序员提供标准的数据访问类和接口,使得独立
-
详解jdbc实现对CLOB和BLOB数据类型的操作
详解jdbc实现对CLOB和BLOB数据类型的操作 1. 读取操作 CLOB //获得数据库连接 Connection con = ConnectionFactory.getConnection(); con.setAutoCommit(false); Statement st = con.createStatement(); //不需要"for update" ResultSet rs = st.executeQuery("select CLOBATTR from TES
-
详解GaussDB for MySQL性能优化
背景 我们先来看看MySQL 8.0的事务提交的大致流程 以上流程,是MySQL8.0对WAL原则的一种实现,这个流程意味着,任何一个事务的提交,一定要完成write buffer和flush to disk流程. 然而那么这个流程中,有一个问题:每个服务器的CPU是有限的,服务器能处理的Thread也是有上限的,那么当我们的业务的并发数量,远远大于我们服务器能并行处理的数量时,那么后来的事务,只能等待前面的事务提交后才能被处理.在这之前,他们什么也做不了.因此,在大并发场景下,如何进一步提升线
-
详解Python连接MySQL数据库的多种方式
上篇文章分享了windows下载mysql5.7压缩包配置安装mysql 后续可以选择 ①在本地创建一个数据库,使用navicat工具导出远程测试服务器的数据库至本地,用于学习操作,且不影响测试服务器的数据 ②连接测试服务器的数据库账号和密码,在测试服务器上操作,内部测试服务器的数据库账号和密码在分配时会给不同账号做权限限制,如不同账号允许登录的方式.开放的数据库范围.账号可读写操作的权限都会不一样,若出现一直使用代码登录不上远程数据库服务器,应检查下账号是否具有权限,可询问负责管理测试服务器数
随机推荐
- 如何隐藏程序的运行
- Android实现向Launcher添加快捷方式的方法
- .NET 常用功能和代码小结
- jQuery中$.ajax()方法参数解析
- JSP制作简单登录界面实例
- 鼠标拖拽移动子窗体的JS实现
- Stop SQL Server
- Js实现手机发送验证码时按钮延迟操作
- sersync2 完全安装配置说明(二) 可选功能与xml高级配置
- jQuery验证插件validation使用指南
- Javascript中的数组常用方法解析
- Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
- 微信小程序之绑定点击事件实例详解
- android多行标签热点示例
- Android编程实现从字符串中查找电话号码的方法
- Android中将Bitmap对象以PNG格式保存在内部存储中的方法
- Java中一个线程执行死循环有什么后果
- C++设计模式之迭代器模式
- 解析php 版获取重定向后的地址(代码)
- Android中监听判断网络连接状态的方法