最近看了下Django, 發現數據庫中文編碼問題, 需要修改數據庫的編碼, 統一為UTF8, 這樣可以解決亂碼問題
修改my.ini文件, 添加三個地方
注意: 5.1版本在mysqld下設置default-character-set=utf8, 5.5的設置變了, 我使用的環境是mysql 5.5
[client] default-character-set=utf8 [mysqld] character-set-server=utf8 init_connect='SET NAMES utf8' [mysql] default-character-set=utf8
修改完成之后, 重啟數據庫, 可以查看
mysql> \s -------------- mysql Ver 14.14 Distrib 5.5.27, for Win32 (x86) Connection id: 33 Current database: Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.5.27 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: 3 min 53 sec Threads: 1 Questions: 282 Slow queries: 0 Opens: 61 Flush tables: 1 Open tables: 54 Queries per second avg: 1.210 --------------
這樣保證連接mysql之后, 默認都使用了UTF8編碼
也可以查看全局變量
mysql> SHOW VARIABLES LIKE 'character_set_%'; +--------------------------+---------------------------------------------+ | 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 | XXX\mysql\share\charsets\ | +--------------------------+---------------------------------------------+ 8 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec)
已經建立的數據庫和表需要進行修改和更新, 分別對數據庫和表進行, 數據量小可以考慮導出為sql語句后修改
修改數據庫, 表和字段的sql語法參考如下
修改數據庫, 以test數據庫為例
mysql> alter database `test` character set utf8;
修改表為utf8, 以book表為例
mysql> alter table `book` character set utf8;
以book表的title字段為例
mysql> alter table `books_book` modify `title` varchar(100) character set utf8;
其中sql語句中的反引號[`]是用來轉義的
參考: