# mysql 中文亂碼問題分析

mysql 中文亂碼問題分析

一、問題分析:

MySQL 中文亂碼通常是因為字符集設置不正確導致的。MySQL 有多種字符集,如 latin1、utf8、utf8mb4 等,如果在創建數據庫、數據表或者字段時沒有指定正確的字符集,或者在插入數據時使用了與數據庫字符集不一致的編碼,就可能出現亂碼。

二、解決方法:

1、確認當前 MySQL 的默認字符集。

在創建數據庫、數據表或字段時,明確指定字符集為 utf8(MySQL 5.5.3以前)或 utf8mb4(MySQL 5.5.3及以后,支持存儲4字節字符,如部分表情符號)。
例如:

# 創建數據庫:order_db, order_db_1, order_db_2, user_db 4個數據庫。CREATE DATABASE `order_db` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
CREATE DATABASE `order_db_1` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
CREATE DATABASE `order_db_2` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
CREATE DATABASE `user_db` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';# 在 數據庫 order_db_1 中,創建兩張表。USE `order_db_1`;# 創建  t_order_1 表DROP TABLE IF EXISTS `t_order_1`;CREATE TABLE `t_order_1` (
`order_id` BIGINT(20) NOT NULL COMMENT '訂單id',
`price` DECIMAL(10,2) NOT NULL COMMENT '訂單價格',
`user_id` BIGINT(20) NOT NULL COMMENT '下單用戶id', 
`status` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '訂單狀態',
PRIMARY KEY(`order_id`) USING BTREE
) ENGINE = INNODB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;# 創建  t_order_2 表DROP TABLE IF EXISTS `t_order_2`;CREATE TABLE `t_order_2` (
`order_id` BIGINT(20) NOT NULL COMMENT '訂單id',
`price` DECIMAL(10,2) NOT NULL COMMENT '訂單價格',
`user_id` BIGINT(20) NOT NULL COMMENT '下單用戶id', 
`status` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '訂單狀態',
PRIMARY KEY(`order_id`) USING BTREE
) ENGINE = INNODB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;# 在數據庫 user_db, order_db_1, order_db_2 三個數據庫中,創建公共表 t_dictUSE user_db;DROP TABLE IF EXISTS `t_dict`;CREATE TABLE `t_dict` (`dict_id` BIGINT(20) NOT NULL COMMENT '字典id',`type` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典類型',`code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典編碼',`value` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典值',PRIMARY KEY (`dict_id`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE = utf8_general_ci ROW_FORMAT=DYNAMIC;USE order_db_1;DROP TABLE IF EXISTS `t_dict`;CREATE TABLE `t_dict` (`dict_id` BIGINT(20) NOT NULL COMMENT '字典id',`type` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典類型',`code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典編碼',`value` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典值',PRIMARY KEY (`dict_id`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE = utf8_general_ci ROW_FORMAT=DYNAMIC;USE order_db_2;DROP TABLE IF EXISTS `t_dict`;CREATE TABLE `t_dict` (`dict_id` BIGINT(20) NOT NULL COMMENT '字典id',`type` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典類型',`code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典編碼',`value` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典值',PRIMARY KEY (`dict_id`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE = utf8_general_ci ROW_FORMAT=DYNAMIC;# 在 user_db 數據庫中,創建 t_user 表:USE `user_db`;# 創建  t_user 表DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` (
`user_id` BIGINT(20) NOT NULL COMMENT '用戶id',
`fullname` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用戶姓名',
`user_type` CHAR(1) DEFAULT NULL COMMENT '用戶類型', 
PRIMARY KEY(`user_id`) USING BTREE
) ENGINE = INNODB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;

2、如果已經出現亂碼,可以通過以下 SQL 命令修改數據表或列的字符集:

# 查看字符編碼:
SHOW VARIABLES LIKE "char%";# 修改數據表或列的字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# 例如:在 user_db 數據庫中,修改表 t_user
ALTER TABLE t_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE t_user CHANGE fullname fullname VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

3、確保在插入數據時使用的客戶端和連接字符串中指定了正確的字符集,例如在 MySQL 客戶端連接時使用SET NAMES ‘utf8mb4’。

如:在 idea 中設置字符集:

idea ---> File ---> Setting...
---> Editor
---> File Encodings
---> utf8

在這里插入圖片描述

4、如果是從文件導入數據出現亂碼,確保文件的編碼格式正確,并且在導入時指定了正確的字符集。

5、檢查 MySQL 的配置文件 my.cnf(linux) 或 my.ini(windows),確保在 [mysqld] 部分設置了正確的字符集,例如:

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

6、修改配置后需要重啟 MySQL 服務。

net stop mysql80
net start mysql80

7、注意:在修改字符集時,需要確保數據庫中數據的兼容性,避免數據損壞。在做任何修改前,應該備份數據庫。

8、java 后臺代碼 設置 utf8 字符編碼亂碼問題

亂碼問題通常發生在字符編碼不一致時,導致字符顯示不正確。在 Java 后端設置 UTF-8 編碼主要涉及到以下幾個方面:

  • 1)設置服務器接收請求和發送響應時使用UTF-8編碼。

  • 2)設置數據庫連接和查詢使用 UTF-8 編碼。

  • 3)設置應用服務器(如Tomcat)的默認編碼為 UTF-8。

8.1 在 Servlet 中設置請求和響應編碼:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
8.2 在數據庫連接中設置編碼:
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8";
8.3 設置 Tomcat 默認編碼(在 server.xml 中):
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"URIEncoding="UTF-8" />
<!--  如果使用 Spring 框架,可以在配置文件中設置:--><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="properties"><props><prop key="fileEncoding">UTF-8</prop></props></property>
</bean>
8.4 確保在整個應用的生命周期中,編碼設置保持一致,以避免亂碼問題。如果問題仍然存在,可能需要檢查其他可能影響編碼的配置,如 JSP 頁面的編碼設置、HTML 頁面的字符集聲明等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39383.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39383.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39383.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go語言特點、編譯及命令

本文主要分為三部分內容分別為&#xff1a;Go語言的特點介紹&#xff1b;編譯windows、linux環境文件及Go命令。 目錄 Go語言特點 編譯文件 編譯window文件 編譯linux文件 Go命令&#xff08;build/run/install/env&#xff09; 編譯文件 直接運行程序 安裝程序 配置G…

互聯網摸魚日報(2024-07-04)

互聯網摸魚日報(2024-07-04) 36氪新聞 用AI創造元宇宙&#xff0c;Meta發布最強3D素材生成模型&#xff0c;一分鐘創造一個世界 比肩Sora&#xff01;視頻模型王者Gen-3回歸&#xff0c;能表現人類復雜感情&#xff0c;但不理解物理世界 中國半導體設備市場要力挽狂瀾 超3億…

Postman 高級用法學習

Postman 高級用法 Postman 是一款強大的 API 調試和開發工具&#xff0c;廣泛應用于 API 開發、測試、調試和自動化流程中。除了基本的 API 請求發送和響應查看功能&#xff0c;Postman 還提供了許多高級功能。以下是詳細的講解&#xff0c;包括具體示例和操作步驟。 一、環境…

探索金融數據API:現代投資的關鍵工具

在當今快節奏的金融市場中&#xff0c;實時準確的數據對于投資者而言至關重要。金融數據API&#xff08;Application Programming Interface&#xff09;成為了投資者獲取和管理數據的核心工具。本文將探討金融數據API的基本概念、用途及其對投資策略的影響。 什么是金融數據A…

PG實踐|內置函數之GENERATE_SERIES之深入理解(二)

&#x1f4eb; 作者簡介&#xff1a;「六月暴雪飛梨花」&#xff0c;專注于研究Java&#xff0c;就職于科技型公司后端工程師 &#x1f3c6; 近期榮譽&#xff1a;華為云云享專家、阿里云專家博主、騰訊云優秀創作者、ACDU成員 &#x1f525; 三連支持&#xff1a;歡迎 ??關注…

#LinuxC高級 筆記二

makefile gcc gdb makefile 1. 分文件編程 1.1 源文件&#xff1a;.c結尾的文件 包含main函數的.c 包含子函數的.c 1.2 頭文件&#xff1a;.h結尾的文件 頭文件、宏定義、typedef 、結構體、共用體、枚舉、函數聲明 include引用時“”和<>的區別&#xff1a; <>去系…

Java:JDK、JRE和JVM 三者關系

文章目錄 一、JDK是什么二、JRE是什么三、JDK、JRE和JVM的關系 一、JDK是什么 JDK&#xff08;Java Development Kit&#xff09;&#xff1a;Java開發工具包 JRE&#xff1a;Java運行時環境開發工具&#xff1a;javac&#xff08;編譯工具&#xff09;、java&#xff08;運行…

23432443

c語言中的小小白-CSDN博客c語言中的小小白關注算法,c,c語言,貪心算法,鏈表,mysql,動態規劃,后端,線性回歸,數據結構,排序算法領域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 給大家分享一句我很喜歡我話&#xff1a; 知不足而奮進&#xff0c;望遠山而前行&am…

聚四氟乙烯消解管/PTFE四氟消化管/配套各廠家石墨消解儀

四氟消解瓶&#xff0c;通常指的是采用聚四氟乙烯&#xff08;PTFE&#xff0c;也稱為特氟龍或鐵氟龍&#xff09;材料制成的實驗室消解容器。 以下是關于四氟消解瓶的一些基本信息&#xff1a; 材質特性&#xff1a; 四氟消解瓶由PTFE材料制成&#xff0c;具有極佳的耐腐蝕…

Python腳本:將Word文檔轉換為Excel文件

引言 在文檔處理中&#xff0c;我們經常需要將Word文檔中的內容轉換成其他格式&#xff0c;如Excel&#xff0c;以便更好地進行數據分析和報告。針對這一需求&#xff0c;我編寫了一個Python腳本&#xff0c;能夠批量處理指定目錄下的Word文檔&#xff0c;將其內容結構化并轉換…

PTrade如何獲取技術值班?如get_RSI - 相對強弱指標;PTrade量化軟件如何獲取?

get_RSI - 相對強弱指標 get_RSI(close, n6) 使用場景 該函數僅在回測、交易模塊可用 接口說明 獲取相對強弱指標RSI指標的計算結果 PTrade是恒生公司開發的一款專業量化軟件&#xff0c;部分合作券商可提供&#xff0c;↑↑↑&#xff01; 參數 close&#xff1a;價格…

.NET發布成單個文件后獲取不到程序所在路徑的問題

.net程序不發布成單個文件&#xff0c;所以運行都是正常的&#xff0c;但是發布成單個文件后發現使用&#xff1a; var basePath Path.GetDirectoryName((System.Reflection.Assembly.GetExecutingAssembly().Location)); 獲取不到應用程序所在的路徑了。 找一下幾個獲取本程…

從混亂到有序:企業級在線文檔助力中小企業數字化轉型的蛻變

在當今數字化浪潮下&#xff0c;企業的數字化轉型已成為行業發展的必然趨勢。他們數字化轉型的痛點在哪里&#xff1f;資金有限、技術人才短缺和管理的復雜性等。很多時候&#xff0c;它們的文件管理比較混亂&#xff0c;大量的知識和數據分散在不同的系統&#xff0c;形成了數…

一篇文章了解URI

1、Uri介紹 在現代網絡應用中&#xff0c;URI&#xff08;Uniform Resource Identifier&#xff0c;統一資源標識符&#xff09;是一個重要的概念。URI用于標識互聯網上的資源&#xff0c;無論是一個網頁、一張圖片、還是一個視頻文件&#xff0c;URI都可以唯一地指向這些資源。…

Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像

Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像 Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像1、MySQL2、Redis3、Redis-Stack4、Redis-Stack-Server5、ElasticSearch6、Kibana7、ElasticSearch-Head8、Nginx9、Rabbi…

Web后端開發概述環境搭建項目創建servlet生命周期

Web開發概述 web開發指的就是網頁向后再讓發送請求,與后端程序進行交互 web后端(javaEE)程序需要運行在服務器中 這樣前端才可以對其進行進行訪問 什么是服務器? 解釋1: 服務器就是一款軟件,可以向其發送請求,服務器會做出一個響應.可以在服務器中部署文件&#xff0c;讓…

MySQL:MySQL總結

文章目錄 MySQL思維導圖基礎實際在 Innodb 存儲引擎中&#xff0c;會用一個特殊的記錄來標識最后一條記錄&#xff0c;該特殊的記錄的名字叫 supremum pseudo-record &#xff0c;所以掃描第二行的時候&#xff0c;也就掃描到了這個特殊記錄的時候&#xff0c;會對該主鍵索引加…

OpenCV 張正友標定法(二)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 在之前的博客OpenCV 張氏標定法中,我們沒有考慮鏡頭畸變等因素,因此計算出的內參與外參均是理想情況下的數值,而如果我們考慮到鏡頭的畸變: 我們就需要考慮使用最小二乘法最小化像素坐標的重投影誤差(上述所求…

套接字的原理和作用機制

套接字&#xff08;Socket&#xff09;是實現網絡通信的基礎&#xff0c;它提供了在網絡中進行數據傳輸的接口和機制。以下是關于套接字原理和作用機制的詳細解釋&#xff1a; 1. 套接字的基本概念 套接字&#xff1a;套接字是網絡通信的端點&#xff0c;可以理解為通信鏈路的…

重溫react-10(函數組件和類組件的ref獲取方式)

App.js的代碼 06是函數組件 07是類組件 import React, { useEffect, useRef } from react; import LearnFunction06 from ./LearnFunction06; // 函數組件和類組件的ref使用方式 import LearnFunction07 from ./LearnFunction07; // 函數組件和類組件的ref使用方式 export de…