通常來講,在使用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 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