mysql编码设置不正确---django中save带中文时会报错。

查看系统的字符集和排序方式的设定可以通过下面的两条命令mysql> status  

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的瑞典语排序方式)... 

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句: 


1.  SET NAMES 'utf8'; 

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

2. 创建数据库 ----- 如果安装的mysql默认不utf8,
后面一定要指定character set utf8;
mysql> create database name character set utf8; 

3. 创建表
CREATE TABLE `tablename` ( 
`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 tablenamecharacter set utf8; 

6. 修改字段用utf8
mysql> alter table tablename modify type_name varchar(50) CHARACTER SET utf8; 

 

7.查看表的创建信息

mysql> show create table tablename;

===========================

MySQL
主要配置文件位置:/etc/mysql/my.cnf.
数据库表文件夹:/var/lib/mysql/,相当于Windows下MySQL的date文件夹

登录MySQL,执行编码显示:

show variables like  ' character% ' ;


+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

修改MySQL默认数据库的编码
需要编辑my.cnf文件,Windows可以直接用Mysql Server Instance Config Wizard 进行设置

sudo gedit  / etc / mysql / my.cnf


找到[client] 添加:

default - character - set = utf8  // 默认字符集为utf8


找到[mysqld] 添加:

 //默认字符集为utf8
default
-character-set=utf8
//设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行
init_connect='SET NAMES utf8'


修改好后,重新启动mysql 即可.

sudo /etc/init.d/mysql restart

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值