二进制安装的数据库可能会有乱码的问题,编译安装的数据库指定默认utf-8的不会产生乱码
1.编译安装的字符集情况
查看字符集的格式 mysql> show create table sanlang \G *************************** 1. row *************************** Table: sanlang Create Table: CREATE TABLE `sanlang` ( `id` int(11) DEFAULT NULL, `name` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> 插入数据 mysql> insert into sanlang values(22,"刘海笑"); Query OK, 1 row affected (0.00 sec) 测试 mysql> select * from sanlang; +------+-----------+ | id | name | +------+-----------+ | 1 | xiaoming | | 2 | xiaoli | | 3 | tt | | 4 | gg | | 22 | testdata | | 22 | 刘海笑 | +------+-----------+ 6 rows in set (0.00 sec) mysql>
更改字符集测试(更改字符集以后可以看出id为22的出现乱码):
mysql> set names gbk ; Query OK, 0 rows affected (0.00 sec) mysql> select * from sanlang; +------+----------+ | id | name | +------+----------+ | 1 | xiaoming | | 2 | xiaoli | | 3 | tt | | 4 | gg | | 22 | testdata | | 22 | Ц | +------+----------+ 6 rows in set (0.10 sec) mysql>
2.mysql数据库常见的字符集介绍
3.MYSQL如何选择合适的字符集
1.如果处理各种各样的文字,发布到不同一眼国家地区,mysql来说UTF-8(每个汉字三个自己),如果应用需要处理英文,仅有少量汉字utf8更好 2.如果只需要支持中文,并且数据量很大,性能要求也很高,可选GBK(订场,每个汉字占用双字节,英文也占双字节),如需大量的运算, 比较排序等,定长字符集,更快,性能高 3.处理移动互联网业务,可能需要使用utf8MP4的字符集 4.老师建议:没有特别的需求,就选择utf8的字符集
4.查看系统字符集
mysql> show character set ; 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 | /application/mysql-5.5.49/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec) mysql>
5.set names 控制客户端的字符集
可以看出set names只是控制了客户端的字符集
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 | /application/mysql-5.5.49/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec) mysql> set name gbk; mysql> show variables like ‘character_set%‘; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /application/mysql-5.5.49/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec)
6.客户端字符集统一
1.客户端字符集统一 法①set names utf8 法②下面三个命令代替set names(其实就是更改了client的字符集) SET character_set_client = gbk SET character_set_connection = gbk SET character_set_results = gbk 法③登录的时候指定字符集 [[email protected] ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock --default-character-set=utf8; 法④通过修改my.cnf 实现修改mysl客户端的字符集,并且永久生效 [client] default-character-set = utf8 #不需要重启服务,退出登录就生效 备注:多实例修改客户端 字符集要修改/etc/my.cnf
7.更改mysql服务端的字符集
按照要求修改my.cnf参数 [mysqld] default-character-set = utf8 #适合5.1以及以前的版本 character-set-server = utf8 #适合5.5
8.创建库的时候指定字符集
mysql> create database oldboy CHARACTER SET gbk COLLATE gbk_chinese_ci; 说明:建表的时候指定字符集,如果不指定字符集,那么表和库的字符一样
9.程序也要统一
程序和库表的字符集统一
10.系统的字符集
[[email protected] ~]# cat /etc/sysconfig/i18n LANG="zh_CN.UTF-8"
11.数据库中执行sql语句的方法
a.sql语句在windows客户端改成utf8没有签名的格式 b.导入数据指定字符集的格式 mysql -uroot -poldboy123 --default-character-set=utf8 <test.sql
12.更改库字符集的思路(库的表里面已经有数据了)
说明:有数据的情况下,对新数据生效,对老数据库不生效 更改库字符集的思想 1.数据库不要更新,导出所有的数据 2.把导出的数据进行字符集的替换(替换表和库) 3.修改my.cnf,更改mysql客户端的服务端的字符集,重启生效 4.导入更改过的字符集的数据,包括表结构语句,提供服务 5.ssh客户端,以及程序更改为对应的字符集
时间: 2024-11-06 07:06:24