0.目錄
2.setup
(1) 安裝步驟,可以順帶安裝mysql administrator和mysql query browser
(2) 安裝完畢,修改 my.ini
(3) 重啟 mysql 服務:
(4) cmd 確認可用:
(5) 安裝 MySQLdb
(6) 腳本內部會先對 execute 的unicode query 參數進行編碼,可以手動加一句 print repr(query) 方便調試,懶得打monkey_patch的話。。。
3.推薦使用姿勢
(1)連接:
(2)創建數據庫:不可省略COLLATE 'utf8_general_ci',有(2)則(3)可以省略 DEFAULT CHARSET=utf8
(3)創建表
4.中文亂碼或其他異常
(1)檢查配置
(2)在Windows cmd 插入或查詢中文出現亂碼
(3)更改數據庫編碼
(4)更改表編碼
1.參考
有關編碼,中文字符的官方解答,必看!!!
A.11 MySQL 5.7 FAQ: MySQL Chinese, Japanese, and Korean Character Sets
mysql> status; -------------- mysql Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using EditLine wrapper Connection id: 21 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.20 MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 4 days 23 hours 32 min 54 sec Threads: 1 Questions: 186 Slow queries: 0 Opens: 141 Flush tables: 1 Open tables: 130 Queries per second avg: 0.000 --------------
2.setup
(1)安裝步驟: Windows 7系統安裝MySQL5.5.21圖解 ,可以順帶安裝mysql administrator和mysql query browser
14、在打開的字符編碼的頁面中,設置mysql要使用的字符編碼,第一個是西文編碼,第二個是多字節的通用utf8編碼,第三個是手動,我們選擇utf-8,如果在這里沒有選擇UTF-8這個編碼的化,在使用JDBC連接數據庫的時候,便會出現亂碼,到那時需要加上如下的代碼“useUnicode=true&characterEncoding=UTF-8 ”,才可以解決亂碼問題,為了以后的方便所以設置為UTF-8編碼,但是有一個問題,那就是當用哪個控制台插入漢字的時候,會報錯,查詢帶漢字的表時,無法顯示漢字,所在需要在每次進入MySQL后,設置一個系統參數“set names gbk”,即可解決該問題,接下來單擊“next”,繼續配置,如圖所示:
(2) 安裝完畢,修改 my.ini
客戶端cmd打開mysql,執行插入中文報錯或插入中文亂碼解決方案
D:\Program Files\MySQL\MySQL Server 5.5
原來是latin1,修改如下:
# CLIENT SECTION #will be read by MySQL client applications. default-character-set=utf8 # SERVER SECTION #will be used when a new schema or table character-set-server=utf8
根據下文的 show variables like 'char%'; 顯示:
CLIENT SECTION對應如下三項,可以被連接參數臨時覆蓋 --default-character-set=utf8
character_set_client | latin1
character_set_connection | latin1
character_set_results | latin1
SERVER SECTION對應如下二項:
character_set_database | latin1
character_set_server | latin1
(3) 重啟 mysql 服務:
C:\Users\win7>net stop mysql
C:\Users\win7>net start mysql
(4) cmd 確認可用:
mysql -u root -p
回車然后輸入密碼
(5) 安裝 MySQLdb
https://pypi.python.org/pypi/MySQL-python/1.2.5
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
(6) 腳本內部會先對 execute 的unicode query 參數進行編碼,可以手動加一句 print repr(query) 方便調試,懶得打monkey_patch的話。。。
C:\Program Files\Anaconda2\Lib\site-packages\MySQLdb\cursors.py
class BaseCursor(object): def execute(self, query, args=None): if isinstance(query, unicode): query = query.encode(db.unicode_literal.charset) if args is not None: if isinstance(args, dict): query = query % dict((key, db.literal(item)) for key, item in args.iteritems()) else: query = query % tuple([db.literal(item) for item in args]) print repr(query) #手動加一句方便調試
3.推薦使用姿勢
(1)連接:
conn = MySQLdb.connect(host='localhost', user='root',passwd='123', db='account', charset='utf8') # OK
如果連接數據庫用localhost連接不上,可以換127.0.0.1
mysql -h localhost -u root -p --default-character-set=utf8
import MySQLdb
conn= MySQLdb.connect(
#host='localhost', host='127.0.0.1', port = 3306, user='root', passwd='root', #db ='database_name', charset='utf8' )
curs = conn.cursor()
(2)創建數據庫:不可省略COLLATE 'utf8_general_ci',有(2)則(3)可以省略 DEFAULT CHARSET=utf8
curs.execute(""" CREATE DATABASE database_name CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; """)
#確認:
curs.execute('SHOW DATABASES')
curs.fetchall()
(3)創建表
curs.execute('USE database_name')
curs.execute(""" CREATE TABLE table_name( id int not null auto_increment, name char(50) null, cate char(50) null, date datetime null, primary key(id) )engine=InnoDB DEFAULT CHARSET=utf8; """)
#確認:
curs.execute('SHOW TABLES')
4.中文亂碼或其他異常
(1)檢查配置
mysql> show variables like 'char%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ | +--------------------------+---------------------------------------------------------+ 8 rows in set (0.00 sec) mysql> \s -------------- mysql Ver 14.14 Distrib 5.5.56, for Win64 (AMD64) Connection id: 743 Current database: Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.5.56 MySQL Community Server (GPL) Protocol version: 10 Connection: localhost via TCP/IP Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 1 day 4 min 47 sec Threads: 4 Questions: 7373195 Slow queries: 1323 Opens: 4725 Flush tables: 1 Open tables: 0 Qu eries per second avg: 85.055 -------------- mysql> use temp Database changed mysql> show create database temp; +----------+---------------------------------------------------------------+ | Database | Create Database | +----------+---------------------------------------------------------------+ | temp | CREATE DATABASE `temp` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+---------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> show full columns from test; +-------+----------+-----------------+------+-----+---------+----------------+---------------------- -----------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-------+----------+-----------------+------+-----+---------+----------------+---------------------- -----------+---------+ | id | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update, references | | | name | char(50) | utf8_general_ci | YES | | NULL | | select,insert,update, references | | | cate | char(50) | utf8_general_ci | YES | | NULL | | select,insert,update, references | | | date | datetime | NULL | YES | | NULL | | select,insert,update, references | | +-------+----------+-----------------+------+-----+---------+----------------+---------------------- -----------+---------+ 4 rows in set (0.19 sec)
mysql> show variables like 'char%';
除了character_set_filesystem | binary,一般要求其他項都是 utf8,通過按照前文的 2.setup 修改 my.ini 可以永久生效。
mysql> set names utf8;
一次性修改 character_set_client, character_set_connection, and character_set_results
mysql> help set names Name: 'SET NAMES' Description: Syntax: SET NAMES {'charset_name' [COLLATE 'collation_name'] | DEFAULT} This statement sets the three session system variables character_set_client, character_set_connection, and character_set_results to the given character set. Setting character_set_connection to charset_name also sets collation_connection to the default collation for charset_name. See http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html. The optional COLLATE clause may be used to specify a collation explicitly. If given, the collation must one of the permitted collations for charset_name. charset_name and collation_name may be quoted or unquoted. The default mapping can be restored by using a value of DEFAULT. The default depends on the server configuration. ucs2, utf16, and utf32 cannot be used as a client character set, which means that they do not work for SET NAMES. URL: http://dev.mysql.com/doc/refman/5.5/en/set-names.html
(2)在Windows cmd 插入或查詢中文出現亂碼
mysql insert中文亂碼無法插入ERROR 1366 (HY000): Incorrect string value: '\xB1\
需要每次連接后輸入如下:
set character_set_client = gbk;
set character_set_results = gbk;
(3)更改數據庫編碼
ALTER DATABASE db_name CHARACTER SET [=] charset_name
ALTER DATABASE db_name COLLATE [=] collation_name
僅對當前連接有效,實際意義???:set character_set_database = utf8;
(4)更改表編碼
MySQL 中文顯示亂碼 看評論!
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
