- 1 é®é¢:æ°æ®åºå符éåæåºè§åä¸ä¸è´
- 2 è§£å³æ¹æ³
- 2.1 å°æ¬å°æ°æ®åºæ¹æutf8mb4ï¼utf8mb4_unicode_ci
- 2.1.1 æ¾å°my.cnfï¼ä¸è¬å¨/etc/mysql/my.cnfï¼å¯ä»¥ç¨locate my.cnfæ¥æ¾ãä¿®æ¹ä¸é¢ä¸é¨å
- 2.1.2 é坿°æ®åºï¼æ£æ¥åé
- 2.1.3 å°å·²ç»å»ºå¥½çæ°æ®åºã表ååè½¬æ¢æutf8mb4,utf8mb4_unicode_ci
- 2.2 å¨Spring Bootä¸é
ç½®ï¼ä¸ä¿®æ¹æ¬å°æ°æ®åº
- 2.2.1 å¨JPA建表æ¶è®¾ç½®è¡¨çç¼ç åæåºè§å
- 2.2.2 è®¾ç½®è¿æ¥åå§åSQL
- 2.1 å°æ¬å°æ°æ®åºæ¹æutf8mb4ï¼utf8mb4_unicode_ci
1 é®é¢:æ°æ®åºå符éåæåºè§åä¸ä¸è´
æè¿éè¦åä¸ä¸ªå·²æçæ°æ®åºè¿è¡æ©å ï¼å·²ææ°æ®åºæ¯ç±PHP建çï¼åæ¥ç±Javaè¿è¡æ©å±ï¼ï¼ä½æ¯åºç°äºæ°è¡¨åæ§è¡¨æ æ³å»ºç«å¤é®çé®é¢ï¼åæ¥åç°æ¯å 为ç¼ç é®é¢ï¼æå¡å¨æ°æ®åºåææ¬å°æ°æ®åºçå符éåæåºè§åä¸å¯¹åºï¼æå¡å¨æ°æ®åºä½¿ç¨çæ¯utf8mb4ï¼utf8mb4_unicode_cièææ¬å°ä½¿ç¨çæ¯utf8ï¼utf8_general_ciã
2 è§£å³æ¹æ³
2.1 å°æ¬å°æ°æ®åºæ¹æutf8mb4ï¼utf8mb4_unicode_ci
è¯¥æ¹æ³åè: æ´æ¹MySQLæ°æ®åºçç¼ç 为utf8mb4
2.1.1 æ¾å°my.cnfï¼ä¸è¬å¨/etc/mysql/my.cnfï¼å¯ä»¥ç¨locate 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'
2.1.2 é坿°æ®åºï¼æ£æ¥åé
å¿ é¡»ä¿è¯
ç³»ç»åé | æè¿° |
---|---|
character_set_client | (客æ·ç«¯æ¥æºæ°æ®ä½¿ç¨çå符é) |
character_set_connection | (è¿æ¥å±å符é) |
character_set_database | (å½åé䏿°æ®åºçé»è®¤å符é) |
character_set_results | (æ¥è¯¢ç»æå符é) |
character_set_server | (é»è®¤çå 鍿ä½å符é) |
è¿å 个åéå¿ é¡»æ¯utf8mb4ã
2.1.3 å°å·²ç»å»ºå¥½çæ°æ®åºã表ååè½¬æ¢æutf8mb4,utf8mb4_unicode_ci
æ´æ¹æ°æ®åºç¼ç ï¼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
妿æä¸æ³ä¿®æ¹æ¬å°æ°æ®åºå¢ï¼é£å°±ç¨ä¸é¢è¿ç§æ¹æ³ãï¼æç¨çæ¯ç¬¬äºç§ï¼
2.2 å¨Spring Bootä¸é ç½®ï¼ä¸ä¿®æ¹æ¬å°æ°æ®åº
2.2.1 å¨JPA建表æ¶è®¾ç½®è¡¨çç¼ç åæåºè§å
- éåMySQL5InnoDBDialect#getTableTypeString()
public class MySQL5InnoDBDialectUtf8mb4 extends MySQL5InnoDBDialect {
@Override
public String getTableTypeString() {
return "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci";
}
}
- é ç½®hibernate.dialect
spring:
jpa:
properties:
hibernate:
dialect: com.xxx.MySQL5InnoDBDialectUtf8mb4
2.2.2 è®¾ç½®è¿æ¥åå§åSQL
é ç½®Druidè¿æ¥æ± ,å¦æä¸ºå ¶ä»è¿æ¥æ± ,设置对åºçconnectionInitSqlså³å¯
DruidConfig.java
@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
spring:
datasource:
druid:
connection-init-sqls: ["SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"]
æåæä¸è¿°è®¾ç½®Spring Data Jpa çæç表ãåæ®µå°±ä¼æ¯utf8mb4ï¼utf8mb4_unicode_ci
PS: mysql.urlè¿æ¯éè¦è®¾ç½®characterEncoding=utf8ä¸ç¶ä¼åºç°ä¸æä¹±ç