linux java mysql 乱码_Linux下MySQL的字符集乱码问题总结

前言:

字符集就是一套文字符号及其编码比较规则的集合。MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。其中,字符集用来定义MySQL数据字符串的存储方式。而校对规则是定义比较字符串的方式。不乱码的总体原则是部署的java程序,Linux系统,MySQL客户端,MySQL服务端,

MySQL的某个库,MySQL的某个库下表的字符集统一。

1>java程序中设置:页面中:contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"

request.setCharacterEncoding("utf-8");

2>linux系统查看字符集:

A>查看Linux系统字符集(Centos7)

[root@lll2 /]# cat /etc/locale.conf

LANG="zh_CN.UTF-8"

B>修改Linux系统字符集

[root@lll2 /]# vim /etc/locale.conf

3>MySQL客户端(默认情况下 character_set_client,character_set_connection,character_set_results 会根据你Linux系统设置的字符集,而设置成什么字符集):

A>查看MySQL客户端字符集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.32/share/charsets/ |

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

8 rows in set (0.03 sec)

B>修改MySQL客户端字符集[client]

#password= your_password

port= 3306

socket= /tmp/mysqld.sock

default-character-set=utf8

注意:通过/etc/my.conf下修改MySQL客户端字符集不需要重启MySQL,退出重新登录就生效。

4>MySQL服务端:

A>查看MySQL客户端字符集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.32/share/charsets/ |

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

B>修改MySQL服务器端字符集[mysqld]

port= 3306

socket= /tmp/mysqld.sock

character_set_server=utf8

skip-external-locking

#character_set_server=utf-8    适用于5.5

#default_character_set=utf-8 适用于5.1及以下

总结:A.通过/etc/my.conf下修改MySQL服务端字符集都需要重启MySQL来生效。

B.在/etc/my.conf下修改MySQL服务端字符集会修改character_set_server,character_set_database两个参数。

5>MySQL的某个库( 如果建库时没有指定字符集,则该库会默认使用character_set_server的字符集)

A>查看创建库的字符集mysql> show create database mysql\G;

*************************** 1. row ***************************

Database: mysql

Create Database: CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8 */

1 row in set (0.06 sec)

B>修改库的字符集

alter database mysql character set utf8;

6>MySQL库下的表(如果建表时没有指定字符集则默认使用所属库的字符集,表中的列没有指定字符集默认都使用表的字符集)

A>查看创建表时的字符集mysql> show create table user\G;

*************************** 1. row ***************************

Table: user

Create Table: CREATE TABLE `user` (

`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',

`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',

`Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',

`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',

`ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',

`ssl_cipher` blob NOT NULL,

`x509_issuer` blob NOT NULL,

`x509_subject` blob NOT NULL,

`max_questions` int(11) unsigned NOT NULL DEFAULT '0',

`max_updates` int(11) unsigned NOT NULL DEFAULT '0',

`max_connections` int(11) unsigned NOT NULL DEFAULT '0',

`max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',

`plugin` char(64) COLLATE utf8_bin DEFAULT '',

`authentication_string` text COLLATE utf8_bin,

PRIMARY KEY (`Host`,`User`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'

1 row in set (0.06 sec)

B>修改表的字符集

alter table user convert to character set utf8;

7>set names latin1背后的原理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.32/share/charsets/ |

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

8 rows in set (0.01 sec)

mysql> set names latin1;

Query OK, 0 rows affected (0.01 sec)

mysql> show variables like 'character_set%';

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

| Variable_name            | Value                                     |

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

| character_set_client     | latin1                                    |

| character_set_connection | latin1                                    |

| character_set_database   | utf8                                      |

| character_set_filesystem | binary                                    |

| character_set_results    | latin1                                    |

| character_set_server     | utf8                                      |

| character_set_system     | utf8                                      |

| character_sets_dir       | /application/mysql-5.5.32/share/charsets/ |

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

8 rows in set (0.00 sec)

总结:

set names latin1就是把上面三个参数改成了latin1。也就是说character_set_client,character_set_connection,character_set_results三者的字符集默认会和

linux系统的字符集一致,但是当在mysql中执行set names字符集操作后,这三者都会改为设置的字符集,但是命令修改时临时生效的。

root@lll2 /]# mysql -u root -p --default-character-set=latin1带字符集登录原理也是临时修改那三个参数。

一技之长,理财投资,写作思考  敬请关注“石林笔记”公众号或者扫我喲:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值