mysql5.6深入解决编码乱码问题
2017-12-21 15:13
483 查看
mysql几乎所有乱码都是因为中文的问题
举例:
上述方法不适用于生产,因为退出再进,可能还会有编码问题
不乱码思想:linux、客户端、服务端、库、表、程序、编码统一
中英文环境:适合utf-8
linux:
系统编码保持utf-8比较合适:
[root@localhost 3306]# cat /etc/sysconfig/i18n
LANG=”zh_CN.UTF-8”
客户端:
set names latinl (临时更改字符集编码)
或者:
default-character-set=utf8
服务端:(更改这个最为重要,需要起重启mysql)
[mysqld]
character_set_server=utf8mb4
库,表 一般随Mysql本身字符集跟着改变
程序:由开发指定
编码选择:
如果需发布到多国,并且汉字不多:选择UTF-8比较好
只需支持中文:选择GBK ,这样性能更快,更高
处理移动互联网业务:选择uft8mb4 比较好,能对处理特殊字符比较好
默认情况下:character_set_client、character_set_connection、character_set_results这三者为系统字符集编码
查看linux系统编码:
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
服务端(即mysql本身)主要更改:character_set_database,character_set_server 的编码,
备注:我们创表的时候的默认b编码跟随mysql本身,创表的时候最好考虑编码,或者指定编码
CREATE DATABASE yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
线上数据库修改字符集:
例如latin1–>utf8
1、库及表结构导出,sed 批量修改改为utf8
2、导出所有数据。
3、修改mysql服务端和客户端编码为utf8
4、删除原有的库表及数据
5、导入新的建库及建表语句
6、导入数据
一般情况下,不到万不得已不要修改线上编码,因为需要停库操作。
举例:
创表: mysql> create database chao; Query OK, 1 row affected (0.00 sec) mysql> use chao; Database changed mysql> create table user(name varchar(11)); Query OK, 0 rows affected (0.30 sec) mysql> show create table user; +-------+------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+------------------------------------------------------------------------------------------------+ | user | CREATE TABLE `user` ( `name` varchar(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) 插入数据验证 mysql> insert into user values ("lili"); mysql> insert into user values ("大米"); mysql> select * from user; +------+ | name | +------+ | lili | | ?? | +------+ 让插入的下一行不乱码可以将表的字符集改为latin1 查看sql文件: set names latin1; mysql> system cat /root/test.sql insert into user values ("大的米"); source /root/test.sql 或者指定字符集: mysql -uroot -pqb123 -S /data/3306/mysql.sock --default-character-set=latin1 chao <test.sql mysql> select * from user; +-----------+ | name | +-----------+ | lili | | ?? | | 大的米 | | 大大米 4000 |
上述方法不适用于生产,因为退出再进,可能还会有编码问题
不乱码思想:linux、客户端、服务端、库、表、程序、编码统一
中英文环境:适合utf-8
linux:
系统编码保持utf-8比较合适:
[root@localhost 3306]# cat /etc/sysconfig/i18n
LANG=”zh_CN.UTF-8”
客户端:
set names latinl (临时更改字符集编码)
或者:
default-character-set=utf8
服务端:(更改这个最为重要,需要起重启mysql)
[mysqld]
character_set_server=utf8mb4
库,表 一般随Mysql本身字符集跟着改变
程序:由开发指定
编码选择:
如果需发布到多国,并且汉字不多:选择UTF-8比较好
只需支持中文:选择GBK ,这样性能更快,更高
处理移动互联网业务:选择uft8mb4 比较好,能对处理特殊字符比较好
查看Mysql当前字符集编码: show variables like "character_set%"; +--------------------------+------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /data/mysql-5.6.36/share/charsets/
默认情况下:character_set_client、character_set_connection、character_set_results这三者为系统字符集编码
查看linux系统编码:
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
服务端(即mysql本身)主要更改:character_set_database,character_set_server 的编码,
备注:我们创表的时候的默认b编码跟随mysql本身,创表的时候最好考虑编码,或者指定编码
CREATE DATABASE yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
线上数据库修改字符集:
例如latin1–>utf8
1、库及表结构导出,sed 批量修改改为utf8
2、导出所有数据。
3、修改mysql服务端和客户端编码为utf8
4、删除原有的库表及数据
5、导入新的建库及建表语句
6、导入数据
一般情况下,不到万不得已不要修改线上编码,因为需要停库操作。
查看mysql变量: show variables; 查看mysql状态: show global status; 在线修改变量: set global key_buffer_size=999999; 查看: mysql> show variables like "key_buffer%"; +-----------------+--------+ | Variable_name | Value | +-----------------+--------+ | key_buffer_size | 999424 | +-----------------+--------+ 1 row in set (0.00 sec)
相关文章推荐
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)适用于centos 7
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题,亲测可用!)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL 5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- Linux/Windows下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Win7 32位MySQL5.6免安装配置编码为utf8——解决Java插入MySQL乱码问题
- CentOS 7下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- Ubuntu14.04下MySQL 5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题,亲测可用)
- Centos6.5下修改Mysql5.6编码方式,解决乱码问题