插入表情符号不适用于spring-boot和MariaDB

我想在mariaDB数据库中插入????之类的表情符号,但总是出现sql错误。

这是堆栈跟踪:

12-01-2018 16:01:44.466 [Executor - Migration - 1] WARN  o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions:129 - SQL Error: 1366, SQLState: 22007

12-01-2018 16:01:44.466 [Executor - Migration - 1] ERROR o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions:131 - (conn:498) Incorrect string value: '\xF0\x9F\x92\xB3\xF0\x9F...' for column 'notes' at row 1

Query is: insert into customer (backend_archiving_date, backend_creation_date, backend_update_date, genius_client_id, address, birthday, city, company_name, country, email, fidelity_account_id, first_name, last_name, notes, phone, siret, zip_code, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?), parameters [<null>,'2018-01-12 15:01:44.454','2018-01-12 15:01:44.454',2159,'20 rue raspail

',<null>,'LEVALLOIS PERRET','','FRANCE','','00c55854-99df-4db1-88b9-34f7e5608477','claude','amsellem','????????????????','','','92300','2152ed7d-80a1-4305-9fcb-4e21f5947e32']

我是我的玛丽亚分贝,桌子上有

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

并且“注释”字段还具有“ utf8mb4-Unicode”字符集。

当我通过sql查询插入时

update customer set notes='????????????????' where id = 'f5920301-5ee0-4d58-a786-d4701d9e9d73';

它可以工作,但是当我想在程序中插入emoji表情时(spring-boot,spring-data-

jpa,hibernate),我总是会收到错误消息(请参阅stacktrace)。

仅供参考,这是创建脚本

CREATE TABLE `customer` (

`id` char(36) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`first_name` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`last_name` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`phone` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`email` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`birthday` date DEFAULT NULL,

`notes` varchar(2048) DEFAULT NULL,

`address` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`city` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`country` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`zip_code` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`company_name` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`siret` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`fidelity_account_id` char(36) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`backend_creation_date` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

`backend_update_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

`backend_archiving_date` timestamp NULL DEFAULT NULL,

`genius_client_id` bigint(20) DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `id` (`id`),

KEY `fk_customer_fidelity_account` (`fidelity_account_id`),

CONSTRAINT `fk_customer_fidelity_account` FOREIGN KEY (`fidelity_account_id`) REFERENCES `fidelity_account` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

这是连接参数(spring-boot application.yml)

# Datasource configuration

spring:

datasource:

type: "com.zaxxer.hikari.HikariDataSource"

url: "jdbc:mariadb://localhost:3306/genius_back useUnicode=yes&characterEncoding=UTF8"

hikari:

driver-class-name: "org.mariadb.jdbc.Driver"

username: "mariadb"

password: "mariadb"

minimum-idle: 5

maximum-pool-size: 20

validation-query: "SET NAMES utf8mb4"

jackson:

serialization:

write_dates_as_timestamps: false

http:

client-user-agent: "Genius"

multipart:

max-file-size: 100Mb

max-request-size: 150Mb

回答:

好的,我发现了问题。

解决方案是添加

spring:

datasource:

connectionInitSql: "SET NAMES 'utf8mb4'"

在application.yml中。

connectionInitSql 由HikariCP在打开连接时使用。

以上是 插入表情符号不适用于spring-boot和MariaDB 的全部内容, 来源链接: utcz.com/qa/413654.html

回到顶部