一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring Data Jpa Mysql使用utf8mb4編碼的示例代碼

Spring Data Jpa Mysql使用utf8mb4編碼的示例代碼

2021-06-10 15:04Ho-jian Java教程

這篇文章主要介紹了Spring Data Jpa Mysql使用utf8mb4編碼的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1 問題:數(shù)據(jù)庫字符集和排序規(guī)則不一致

最近需要向一個已有的數(shù)據(jù)庫進(jìn)行擴充(已有數(shù)據(jù)庫是由php建的,后來由java進(jìn)行擴展),但是出現(xiàn)了新表和舊表無法建立外鍵的問題,后來發(fā)現(xiàn)是因為編碼問題,服務(wù)器數(shù)據(jù)庫和我本地數(shù)據(jù)庫的字符集和排序規(guī)則不對應(yīng),服務(wù)器數(shù)據(jù)庫使用的是utf8mb4,utf8mb4_unicode_ci而我本地使用的是utf8,utf8_general_ci。

2 解決方法

2.1 將本地數(shù)據(jù)庫改成utf8mb4,utf8mb4_unicode_ci

該方法參考: 更改mysql數(shù)據(jù)庫的編碼為utf8mb4

2.1.1 找到my.cnf,一般在/etc/mysql/my.cnf,可以用locate my.cnf查找。修改下面三部分

?
1
2
3
4
5
6
7
8
9
[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'

2.1.2 重啟數(shù)據(jù)庫,檢查變量

 

復(fù)制代碼 代碼如下:
show variables where variable_name like 'character_set_%' or variable_name like 'collation%';

 

必須保證

 

系統(tǒng)變量 描述
character_set_client (客戶端來源數(shù)據(jù)使用的字符集)
character_set_connection (連接層字符集)
character_set_database (當(dāng)前選中數(shù)據(jù)庫的默認(rèn)字符集)
character_set_results (查詢結(jié)果字符集)
character_set_server (默認(rèn)的內(nèi)部操作字符集)

 

這幾個變量必須是utf8mb4。

2.1.3 將已經(jīng)建好的數(shù)據(jù)庫、表和列轉(zhuǎn)換成utf8mb4,utf8mb4_unicode_ci

更改數(shù)據(jù)庫編碼:alter database database_name character set utf8mb4 collate utf8mb4_unicode_ci;

更改表編碼:alter table table_name convert to character set utf8mb4 collate utf8mb4_unicode_ci;

更改列編碼:alter table table_name change column_name column_name varchar( 36 ) character set utf8mb4 collate utf8mb4_unicode_ci not null

mysql官方文檔
database character set and collation
table character set and collation
column character set and collation

如果我不想修改本地數(shù)據(jù)庫呢?那就用下面這種方法。(我用的是第二種)

2.2 在spring boot中配置,不修改本地數(shù)據(jù)庫

2.2.1 在jpa建表時設(shè)置表的編碼和排序規(guī)則

重寫mysql5innodbdialect#gettabletypestring()

?
1
2
3
4
5
6
public class mysql5innodbdialectutf8mb4 extends mysql5innodbdialect {
  @override
  public string gettabletypestring() {
    return "engine=innodb default charset=utf8mb4 collate utf8mb4_unicode_ci";
  }
}

配置hibernate.dialect

?
1
2
3
4
5
spring:
 jpa:
  properties:
   hibernate:
    dialect: com.xxx.mysql5innodbdialectutf8mb4

2.2.2 設(shè)置連接初始化sql

配置druid連接池,如果為其他連接池,設(shè)置對應(yīng)的connectioninitsqls即可

druidconfig.java

?
1
2
3
4
5
6
7
8
9
10
11
12
@configuration
public class druidconfig {
  @value("${spring.datasource.druid.connection-init-sqls")
  private list<string> connectioninitsqls;
 
  @bean
  public druiddatasource datasource() {
    druiddatasource datasource = new druiddatasource();
    datasource.setconnectioninitsqls(connectioninitsqls);
    return datasource;
  }
}

application.yml

?
1
2
3
4
spring:
 datasource:
  druid:
   connection-init-sqls: ["set names utf8mb4 collate utf8mb4_unicode_ci"]

最后按上述設(shè)置spring data jpa 生成的表、字段就會是utf8mb4,utf8mb4_unicode_ci

ps: mysql.url還是需要設(shè)置characterencoding=utf8不然會出現(xiàn)中文亂碼

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/hhaojian/article/details/79243763

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美性一级交视频 | 国产伦久视频免费观看视频 | 爱操综合网| 91手机在线 | 日本黄色网页 | 羞羞色男人的天堂伊人久久 | 亚洲AV 中文字幕 国产 欧美 | 国产成人精品999在线 | 国产专区一va亚洲v天堂 | 欧美一级乱妇老太婆特黄 | 欧美草逼视频 | 国产成人精品本亚洲 | 国产伦精品一区二区三区免费观看 | 午夜性爽视频男人的天堂在线 | 7788理论片在线观看 | 动漫白丝袜美女羞羞 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 男人好大好硬好爽免费视频 | 国产尤物精品视频 | 精品亚洲欧美中文字幕在线看 | 无敌在线视频观看免费 | 情乱奶水欲 | 免费的伦理片 | 国产区一二三四区2021 | 性猛交娇小69hd | katsuniav在线播放 | 国产二区三区 | 精品无码人妻一区二区免费AV | 久久99视热频国只有精品 | 日本在线视频免费看 | 77成人影院| 非洲黑人xxxxxbbbbb | 国产综合久久 | 国产精品自产拍在线观看2019 | 成人免费播放器 | 日韩伦理在线免费观看 | 日本小视频免费 | 欧美日韩中文国产一区 | 视频亚洲一区 | 精彩国产萝视频在线 | 亚洲AV综合99一二三四区 |