mysql5.6深入解决编码乱码问题
来源:互联网 发布:热血江湖人工智能披风 编辑:程序博客网 时间:2024/06/05 03:44
mysql几乎所有乱码都是因为中文的问题
举例:
创表:mysql> create database chao;Query OK, 1 row affected (0.00 sec)mysql> use chao;Database changedmysql> 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.sqlinsert into user values ("大的米");source /root/test.sql或者指定字符集:mysql -uroot -pqb123 -S /data/3306/mysql.sock --default-character-set=latin1 chao <test.sqlmysql> select * from user;+-----------+| name |+-----------+| lili || ?? || 大的米 || 大大米 |
上述方法不适用于生产,因为退出再进,可能还会有编码问题
不乱码思想: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)
- mysql5.6深入解决编码乱码问题
- CenOS下mysql5.6修改字符编码,解决sql语句中带有中文,会乱码问题
- Linux/Windows下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- CentOS 7下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Centos6.5下修改Mysql5.6编码方式,解决乱码问题
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- mysql5乱码问题的解决
- Win7 32位MySQL5.6免安装配置编码为utf8——解决Java插入MySQL乱码问题
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题,亲测可用)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题,亲测可用!)
- 设置MySql5.5数据库的字符编码为UTF8,解决中文乱码问题
- mysql5.5 解决中文乱码问题 修改默认编码为utf8
- CentOS 7下MySQL5.7的修改字符集编码为UTF8(解决中文乱码问题)
- 源码剖析之wait queue
- yii2 展示静态页面
- oracle bfilename <Value Error>
- 【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法
- SQL Server 中WITH (NOLOCK)浅析
- mysql5.6深入解决编码乱码问题
- POJ:3041-Asteroids(匈牙利算法模板)
- 关于微信公众号获取token的学习总结
- 北京云栖大会MaxCompute又出大招,Python UDF抢先体验!
- MySQL添加新用户、为用户创建数据库、为新用户分配权限
- 深度学习—加快梯度下降收敛速度(一):mini-batch、Stochastic gradient descent
- 判断使用的代理IP是否有用
- 设计模式——观察者模式
- windows数据库mysql安装及C++连接