实验环境:Ubuntu 14.04 mysql 5.5


想要不乱码统一字符集(linux ,客户端,服务端,库,表,程序)


-- 查看 MySQL 数据库服务器和数据库字符集。

mysql> show variables like '%char%';

-- 查看某库(表)的字符集

mysql> show create datanase db_name;

 

+----------+---------------------------------------------------------------+

| Database | Create Database                                               |

+----------+---------------------------------------------------------------+

| db_name  | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |

+----------+---------------------------------------------------------------+

-- 查看某表的每个字段的字符集

mysql> show full columns from student;

+------------+----------+-------------------+------+-----+---------+-------+---------------------------------+---------+

| Field      | Type     | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |

+------------+----------+-------------------+------+-----+---------+-------+---------------------------------+---------+

| Sno        | char(9)  | utf8_general_ci   | NO   | PRI | NULL    |       | select,insert,update,references |         |

| Sname      | char(20) | utf8_general_ci   | YES  | UNI | NULL    |       | select,insert,update,references |         |

| Ssex       | char(2)  | utf8_general_ci   | YES  |     | NULL    |       | select,insert,update,references |         |

| Sage       | int(11)  | NULL              | YES  |     | NULL    |       | select,insert,update,references |         |

| Sdept      | char(20) | utf8_general_ci   | YES  |     | NULL    |       | select,insert,update,references |         |

+------------+----------+-------------------+------+-----+---------+-------+---------------------------------+---------+

6 rows in set (0.00 sec)

-- 查看linux字符集

# echo $LANG


创建不同字符集的数据库

不改校对规则时,默认是拉丁字符集

create database test_utf8 CHANACTER SET utf8_general_ci; <= utf8 字符集数据库

create database test_gbk DEFAULT CHANACTER SET gbk_chinese_ci;  <= gbk 字符集数据库


例:

 1、根据开发的程序确定字符集(建议utf8)

 2、编译时指定字符集    

-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \

    之后创建的表默认字符就是utf8 

3、编译时没有指定默认字符集或和程序不同的字符集

    指定字符及创建数据库

>create database test_utf8 CHANACTER SET utf8_general_ci; <= utf8 字符集数据库>create database test_gbk DEFAULT CHANACTER SET gbk_chinese_ci;  <= gbk 字符集数据库

4、已经创建好的数据库内有数据

    修改数据库的字符集 

>alter database test character set utf8;

5、通过配置文件修改字符集

# vi /etc/my.cnf
[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]character-set-server=utf8

6、修改字符集(临时)

> set names utf8;

(原理是修改

character_set_client 、 character_set_connection 、 character_set_results ,三个参数)

7、带字符集登陆(临时)

# mysql -uroot -p --default-character-set=utf8

(原理是修改

character_set_client 、 character_set_connection 、 character_set_results ,三个参数)

重启服务

(改客户端字符集不需重启

  改服务器端的需重启)

# /etc/rc.d/init.d/mysql restart