pymysql常見問題

一、Python中pymysql出現亂碼的解決方法

通常來講,在使用mysql最麻煩的問題在於亂碼。python

查看mysql的編碼:mysql

show variables like 'character_set_%';

能夠看到以下結果:sql

character_set_client爲客戶端編碼方式;
character_set_connection爲創建鏈接使用的編碼;
character_set_database數據庫的編碼;
character_set_results結果集的編碼;
character_set_server數據庫服務器的編碼;數據庫

只要保證以上四個採用的編碼方式同樣,就不會出現亂碼問題服務器

而後能夠直接在這裏設置mysql的編碼。session

set character_set_client = xxxxx

這樣就將客戶端編碼修改過來了。this

可是,對於已經創建好的數據庫和數據表,編碼仍是沒有變的,仍是要使用alter命令去更改對應的編碼編碼

可是,即使修改了數據庫的編碼,在python中仍是會存在存入數據庫的時候的亂碼問題,解決方法就是在連接數據庫的時候指定編碼。例如:spa

sql_con = MySQLdb.connect(host=MYSQL_ADDR , user=MYSQL_USER , passwd=MYSQL_PWD , db=MYSQL_DB , charset="utf8")

這就指定了客戶端的編碼是utf8.而後就解決了亂碼問題。code

二、mysql總是中止運行該怎麼解決

 

MySQL 5.7.9版本sql_mode=only_full_group_by問題

 

三、MySQL 5.7.9版本sql_mode=only_full_group_by問題

用到GROUP BY 語句查詢時com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by錯誤

解決方法 (修改全局):執行set global   sql_mode = ''; 把sql_mode 改爲非only_full_group_by模式。驗證是否生效 SELECT @@GLOBAL.sql_mode 或 SELECT @@sql_mode

 

執行(只是修改會話級別的,只是當前會話生效)set  session sql_mode = ''; 把sql_mode 改爲非only_full_group_by模式。驗證是否生效 SELECT @@GLOBAL.sql_mode 或 SELECT @@sql_mode

 

 

 

 

相關文章
相關標籤/搜索