实验环境: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