Python連接MySQL查詢結(jié)果亂碼的參數(shù)配置方法

python連接mysql查詢結(jié)果出現(xiàn)亂碼的解決方法是確保字符集設(shè)置一致。1. 確保數(shù)據(jù)庫和表使用utf8mb4字符集,可通過show create database和show create table檢查并用alter語句修改;2. python連接時在參數(shù)中指定charset=’utf8mb4’;3. 檢查并設(shè)置連接的校驗規(guī)則,執(zhí)行set names和set character set為utf8mb4;4. 確保終端或輸出環(huán)境支持utf-8編碼。按照以上步驟操作即可避免亂碼問題。

Python連接MySQL查詢結(jié)果亂碼的參數(shù)配置方法

Python連接mysql查詢結(jié)果出現(xiàn)亂碼,通常是因為字符集設(shè)置不一致。要解決這個問題,關(guān)鍵在于正確配置數(shù)據(jù)庫連接參數(shù)中的charset選項,確保從數(shù)據(jù)庫到程序之間的字符傳輸是一致的。

1. 確保MySQL數(shù)據(jù)庫和表使用正確的字符集

在開始寫代碼之前,先檢查一下你的數(shù)據(jù)庫、表以及字段的字符集設(shè)置是否統(tǒng)一。推薦使用utf8mb4,它支持更廣泛的字符(包括表情符號):

  • 數(shù)據(jù)庫字符集:

    立即學(xué)習(xí)Python免費學(xué)習(xí)筆記(深入)”;

    SHOW CREATE DATABASE your_db;

    應(yīng)該看到 CHARACTER SET utf8mb4

  • 表字符集:

    SHOW CREATE TABLE your_table;

    同樣應(yīng)為 CHARACTER SET utf8mb4

如果發(fā)現(xiàn)不是,可以用以下語句修改:

ALTER DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. Python連接時指定charset=’utf8mb4′

在用pymysql或mysql-connector-python等庫連接MySQL時,一定要在連接參數(shù)中顯式指定charset=’utf8mb4′,否則默認可能使用的是latin1或者其他編碼。

示例(以pymysql為例):

import pymysql  conn = pymysql.connect(     host='localhost',     user='root',     password='your_password',     database='your_db',     charset='utf8mb4',  # 關(guān)鍵點在這里     cursorclass=pymysql.cursors.DictCursor )

如果你漏掉了這一步,即使數(shù)據(jù)庫是utf8mb4,Python讀出來的數(shù)據(jù)也可能顯示亂碼,尤其是中文或表情符號。

3. 檢查連接的校驗規(guī)則(Collation)

有時候雖然設(shè)置了charset=’utf8mb4’,但仍然有問題,可能是服務(wù)器端默認的collation設(shè)置不對。可以在連接后執(zhí)行一句SQL查看當(dāng)前連接的字符集配置:

SHOW VARIABLES LIKE 'character_set%';

你應(yīng)該看到類似下面的結(jié)果:

character_set_client    | utf8mb4 character_set_connection| utf8mb4 character_set_database  | utf8mb4 character_set_results   | utf8mb4 character_set_server    | utf8mb4

如果不是,可以在連接成功后主動執(zhí)行:

cursor.execute("SET NAMES 'utf8mb4'") cursor.execute("SET CHARACTER SET utf8mb4")

4. 確保終端/輸出環(huán)境也支持UTF-8

最后別忘了,打印或者展示的時候也要保證輸出環(huán)境支持UTF-8,比如你在命令行運行腳本,確保終端編碼是UTF-8;如果是網(wǎng)頁展示,也要設(shè)置html的meta頭或響應(yīng)頭為UTF-8。


基本上就這些。只要數(shù)據(jù)庫、連接參數(shù)和輸出環(huán)境三者都使用UTF-8或utf8mb4,Python連接MySQL就不會再出現(xiàn)亂碼問題了。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊6 分享