1. 程式人生 > >python寫入mysql中文亂碼問題

python寫入mysql中文亂碼問題

要在連線的時候說明客戶端命令的編碼格式。

import MySQLdb

def connectMysql(self, mysqlIP, mysqlport, mysqlusername, mysqlpassword, mysqlDefaleDB ):

connectManger = MySQLdb.connect(

                                             host = mysqlIP,

                                             port = mysqlport,

                                             user = mysqlusername,

                                             passwd = mysqlpassword,

                                             db = mysqlDefaleDB,

                                             charset="utf8"

                                             )

這裡的charset一定要設定成你python指令碼中的字串編碼,要不然指令碼中的中文傳到資料庫就會亂碼。

參考:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
預設就是瑞典latin1,一下是換成我們自己的編碼,如utf8:
外部訪問資料亂碼的問題就出在這個connection連線層上,解決方法是在傳送查詢前執行一下下面這句:

1. SET NAMES 'utf8';

它相當於下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

一般只有在訪問之前執行這個程式碼就解決問題了,下面是建立資料庫和資料表的,設定為我們自己的編碼格式。
2. 建立資料庫
mysql> create database name character set utf8;

3. 建立表
CREATE TABLE `type` (
`id` int(10) unsigned NOT NULL auto_increment,
`flag_deleted` enum('Y','N') character set utf8 NOT NULL default 'N',
`flag_type` int(5) NOT NULL default '0',
`type_name` varchar(50) character set utf8 NOT NULL default '',
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

4. 修改資料庫成utf8的.
mysql> alter database name character set utf8;

5. 修改表預設用utf8.
mysql> alter table type character set utf8;

6. 修改欄位用utf8
mysql> alter table type modify type_name varchar(50) CHARACTER SET utf8;

一、編輯MySql的配置檔案
MySql的配置檔案Windows下一般在系統目錄下或者在MySql的安裝目錄下名字叫my.ini,可以搜尋,Linux下一般是 /etc/my.cnf

--在 [mysqld] 標籤下加上三行
default-character-set = utf8
character_set_server = utf8
lower_case_table_names = 1 //表名不區分大小寫(此與編碼無關)

--在 [mysql] 標籤下加上一行
default-character-set = utf8

--在 [mysql.server]標籤下加上一行
default-character-set = utf8

--在 [mysqld_safe]標籤下加上一行
default-character-set = utf8

--在 [client]標籤下加上一行
default-character-set = utf8


二、重新啟動MySql服務
Windows可在服務管理器中操作,也可使用命令列:
net stop mysql 回車
net start mysql 回車
服務名可能不一定為mysql,請按自己的設定

Linux下面可是用 service mysql restart

如果出現啟動失敗,請檢查配置檔案有沒有設定錯誤

?

?

三、檢視設定結果
登入MySql命令列客戶端:開啟命令列
mysql –uroot –p 回車
輸入密碼
進入mysql後 執行 :show variables like "%char%";
顯示結果應該類似如下:

| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |

如果仍有編碼不是utf8的,請檢查配置檔案,也可使用mysql命令設定:
set character_set_client = utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;
以上命令有部分只對當前登入有效,所以不是很管用。

四、建庫匯入資料
匯入sql指令碼檔案前,先確保該指令碼檔案及內容格式為UTF-8編碼格式,
同以上方法登入mysql命令列,use 庫名 進入相應資料庫
set names utf8;
source sql指令碼檔名;

五、附錄
如果無法更改資料庫配置檔案,可以採取一下方法(不保證全部有效):
1、建資料庫時設定資料庫編碼為utf-8
例如 create database `test` default character set utf8;


2、匯入資料庫sql的時候,請確保sql檔案為utf-8編碼
進入mysql命令列後 輸入 set names utf8;
再進入資料庫 use test;
在匯入sql指令碼 source test.sql;

相關推薦

python寫入mysql中文亂碼問題

要在連線的時候說明客戶端命令的編碼格式。import MySQLdbdef connectMysql(self, mysqlIP, mysqlport, mysqlusername, mysqlpassword, mysqlDefaleDB ):connectManger = MySQLdb.connect(

eclipse寫入mysql中文亂碼

1、response.setContentType("text/html;charset=UTF-8");   request.setCharacterEncoding("UTF-8"); 2、byte a[]  = Dept.getBytes("ISO-8859-1");

遇到問題----kettle----寫入mysql中文亂碼

新建流程如下: CSV檔案輸入如下: 使用utf-8編碼 CSV檔案也已經在記事本中另存為UTF-8的文字。 表輸出如下: mysql中建立語句如下: CREATE TABLE `nors2` ( `id` int(11) N

jdbc 寫入mysql 中文亂碼

解決辦法:      1.建立資料庫時將資料庫的預設字符集指定為gbk。建議用工具(如phpmyadmin等)     2.修改Client預設字符集為UTF-8。windows下在mysql安裝目錄

JSP頁面寫入MYSQL中文亂碼問題

插入中文,資料庫出現“???”,確保頁面編碼和資料庫編碼沒有問題 那麼只需在getConnection的URL中加上 ?useUnicode=true&characterEncoding=UT

javaEE寫入Mysql中文亂碼解決方法

做網站頁面傳值中有中文的時候,可以使用filter來進行中文編碼過濾,可是好不容易在java的控制檯輸出正常了,但插入到Mysql裡,還是亂碼),這種情況多數是連結資料庫時的編碼出了問題 這時:1、

python指令碼匯入mysql中文亂碼

實際工作中經常會涉及到指令碼匯入資料到庫中, 如果資料中有中文,搞不好會出現亂碼問題。根據實際工作中的經驗,為了避免亂碼,總結了如下經驗: 以資料庫編碼為utf-8為例 1、把匯入檔案修改成utf-8編碼 ue: 檔案-轉換-asc到utf8 2、指令碼連線資料庫使用ut

mysql中文亂碼解決方式

方式 sqlserver 查看 fadein tin 方案 tab views 編碼 近期項目使用到mysql。卻突然出現了中文亂碼問題。嘗試了多種方案,最終解決亂碼問題,總結一下解決方式,給遇到同樣問題的人一點參考。 中文亂碼的原因 1.安裝m

mysql中文亂碼問題

mysql最近在開發過程中,使用到MySQL的數據庫,而在將中文數據插入到數據庫的時候出現了數據亂碼的問題,在網上找了很多方法,問了很多人,試了很久才發現網上有的方法是不行的,因此在此記錄下,以便他人查找。查看字符編碼首先,將中文插入到數據庫亂碼是因為沒有將數據庫編碼設置為支持中文的編碼,mysql的默認編碼

python畫圖顯示中文亂碼

family cnblogs code otl 指定 param logs port 解決 import matplotlib #指定默認字體 matplotlib.rcParams[‘font.sans-serif‘] = [‘SimHei‘] matplotlib.r

解決jdbc MySQL中文亂碼問題

spa style mysql安裝 亂碼問題 img images mysql ges 安裝 進MySQL安裝目錄,打開my.ini        這兩個地方改成gbk               重啟服務解決jdbc MySQL中文亂碼問題

徹底解決mysql中文亂碼

在服務器 user cli varchar oba test roo 插入 rom mysql是我們項目中非常常用的數據型數據庫。但是因為我們需要在數據庫保存中文字符,所以經常遇到數據庫亂碼情況。下面就來介紹一下如何徹底解決數據庫中文亂碼情況。 1、中文亂碼

MySQL中文亂碼

mysql數據庫 默認 XML mil -c 小寫 div like 數據 MySQL中文亂碼處理 找到my.ini文件(默認在C:\ProgramData\MySQL\MySQL Server 5.7文件夾下); 在my.ini中: 搜索到[client],修改或

Python 註釋和中文亂碼

uft str class 計算機 運行 中文 不支持 encoding linux Python 註釋分為三種: 1.單行註釋:# 2.多行註釋:前後3個單引號,或者三個雙引號; 如:‘‘‘ 多行註釋 ‘‘‘, """或者 多行註釋 ‘""" 3.特殊註釋:  

jsp和servlet操作mysql中文亂碼問題的解決辦法

inux com 過濾 國際化 出現 conf onf my.cnf pos 轉載:http://www.jb51.net/article/49253.htm 首先看是從什麽地方開始出現的亂碼,只要統一編碼,就不會出現亂碼,下面以uft-8(個人認為最好)為例,詳細說明

解壓版中文亂碼問題MYSQL中文亂碼

AI mage mysql client pri 服務 fault src file 安裝的是解壓版的MYSQL,具體配置參考:https://jingyan.baidu.com/article/9c69d48f85032f13c9024e15.html 。 1:解壓之

MySQL中文亂碼處理_字符集轉換處理

MySQL 中文亂碼 字符集轉換-- 中文亂碼修復 -- 查看MySQL服務參數設置mysql> show variables like ‘%character%‘;+--------------------------+----------------------------------+| Vari

python寫入mysql

cut class nbsp port sele fetchone fetch select 0.12 import pymysql conn = pymysql.connect(host=‘192.168.70.129‘,port=3306,user=‘root‘,pa

mysql中文亂碼--存入mysql裏的中文變成問號的解決辦法

一次 func convert 測試的 alter UNC pan mysql中文亂碼 cte 今天,服務器裏測試的時候,發現存入數據庫的中文全部變成問號了! 首先想到這是編碼問題:於是乎再次設置數據庫的編碼為utf8 可是,問題仍然存在: 後來發現,這個問題的根源

關於Python萬惡的中文亂碼和找不到問題

color 變現 亂碼 path pat python round unicode 傳遞 rootDir = os.path.join(CASE_PATH, "系統", "基礎", "管理")print rootDirprint(chardet.detect(rootDir