MySQL存儲(chǔ)表情時(shí)報(bào)錯(cuò):java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解決方法
前言
本文主要介紹了關(guān)于MySQL存儲(chǔ)表情報(bào)錯(cuò):java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'的相關(guān)解決方法,分享出供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:
本項(xiàng)目是基于Spring MVC + MySQL + Druid DataSource。在往數(shù)據(jù)庫(kù)插入表情Emoji字符時(shí)報(bào)錯(cuò):
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'
普通字符最多占用3個(gè)字節(jié),使用utf8足夠。而emoji表情字符占用4個(gè)字節(jié),需要使用utf8mb4字符集存儲(chǔ)。解決需要在兩個(gè)地方做修改:MySQL服務(wù)器端和連接的客戶端。
MySQL服務(wù)器端
之前給大家介紹過(guò)使MySQL能夠存儲(chǔ)emoji表情字符的設(shè)置教程,想進(jìn)一步了解的朋友可以先看一看。
在服務(wù)器端把需要存儲(chǔ)表情emoji字符的字段改用utf8mb4字符集:
ALTER TABLE mytable MODIFY COLUMN myfiled varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
客戶端
客戶端需要把連接的字符集設(shè)定為utf8mb4。
設(shè)置如下:
set names utf8mb4;
使用的是阿里開(kāi)源的druid datasource,它有一個(gè)屬性connectionInitSqls,它用來(lái)設(shè)置物理連接初始化的時(shí)候執(zhí)行的sql。所以我們可以使用connectionInitSqls來(lái)初始化連接。
Spring配置如下:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本屬性 url、user、password --> <property name="url" value="jdbc:mysql://localhost:3888/majing?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" /> <property name="username" value="dbusername"/> <property name="password" value="dbpasswod"/> <property name="connectionInitSqls" value="set names utf8mb4;" /> <!-- 其他配置 --> </bean>
其他的數(shù)據(jù)庫(kù)連接池如dbcp2,HikariCP都有connectionInitSqls屬性。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
mysql重置root密碼的完整步驟(適用于5.7和8.0)
這篇文章主要介紹了mysql重置root密碼的完整步驟,文中描述了如何停止MySQL服務(wù)、以管理員身份打開(kāi)命令行、替換配置文件路徑、修改密碼以及重新啟動(dòng)MySQL服務(wù)的過(guò)程,需要的朋友可以參考下2025-01-01
最新Navicat?15?for?MySQL破解+教程?正確破解步驟
Navicat?for?MySQL是一個(gè)針對(duì)MySQL數(shù)據(jù)庫(kù)而開(kāi)發(fā)的第三方mysql管理工具,該軟件可以用于?MySQL?數(shù)據(jù)庫(kù)服務(wù)器版本?3.21?或以上的和?MariaDB?5.1?或以上,這篇文章主要介紹了最新Navicat?15?for?MySQL破解+教程?正確破解步驟,需要的朋友可以參考下2023-04-04
MySQL使用binlog2sql工具實(shí)現(xiàn)在線恢復(fù)數(shù)據(jù)功能
binlog2sql 是大眾點(diǎn)評(píng)開(kāi)源的一款用于解析 MySQL binlog 的工具,根據(jù)不同選項(xiàng),可以得到原始SQL、回滾SQL等,下面我們就來(lái)看看如何使用binlog2sql實(shí)現(xiàn)在線恢復(fù)數(shù)據(jù)功能吧2025-03-03
阿里云Linux CentOS 7.2下自建MySQL的root密碼忘記的解決方法
這篇文章主要介紹了阿里云Linux CentOS 7.2下自建MySQL的root密碼忘記的解決方法,需要的朋友可以參考下2017-07-07
MySQL的日志基礎(chǔ)知識(shí)及基本操作學(xué)習(xí)教程
這篇文章主要介紹了MySQL的日志基礎(chǔ)知識(shí)學(xué)習(xí)教程,包括MySQL中日志相關(guān)常用的服務(wù)器變量說(shuō)明,極力推薦!需要的朋友可以參考下2015-11-11
Centos7下安裝和配置MySQL5.7.20的詳細(xì)教程
這篇文章主要介紹了Linux(CentOS7)下安裝和配置MySQL5.7.20詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià),需要的朋友可以參考下2020-05-05
MySQL千萬(wàn)級(jí)數(shù)據(jù)的大表優(yōu)化解決方案
mysql數(shù)據(jù)庫(kù)中的表數(shù)據(jù)量幾千萬(wàn)后,查詢速度會(huì)很慢,日常各種卡慢,嚴(yán)重影響使用體驗(yàn)。在考慮升級(jí)數(shù)據(jù)庫(kù)或者換用大數(shù)據(jù)解決方案前,必須優(yōu)化現(xiàn)有mysql數(shù)據(jù)庫(kù)表設(shè)計(jì)和sql語(yǔ)句。2022-11-11

