您的位置:首页 > 数据库 > MySQL

MySQL 中文显示乱码

2015-06-07 01:03 537 查看


MySQL中默认字符集的设置有四级:服务器级,数据库级,表级 。最终是字段级 的字符集设置。注意前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。所以我们建议要用show create table table ; 或show full fields from tableName; 来检查当前表中字段的字符集设置。

MySQL中关于连接环境的字符集设置有 Client端,connection, results 通过这些参数,MySQL就知道你的客户端工具用的是什么字符集,结果集应该是什么字符集。这样MySQL就会做必要的翻译,一旦这些参数有误,自然会导致字符串在转输过程中的转换错误。基本上99%的乱码由些造成。

乱码后需要检查的信息。(如果需要论坛上的朋友帮助,建议你提供以下信息 )

1. 数据库表中字段的字符集设置show create table TableNameshow full columns from tableName

mysql> show create table t1;

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

| Table | Create Table

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

| t1 | CREATE TABLE `t1` (

`id` int(11) NOT NULL,

`c1` varchar(30) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

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

1 row in set (0.00 sec)

mysql> show full columns from t1;

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

| Field | Type | Collation | Null | Key |

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

| id | int(11) | NULL | NO | PRI |

| c1 | varchar(30) | gbk_chinese_ci | YES | |

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

2 rows in set (0.00 sec)

mysql>

2. 当前联接系统参数 show variables like 'char%'

mysql> show variables like 'char%';

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

| Variable_name | Value

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

| character_set_client | gbk

| character_set_connection | gbk

| character_set_database | latin1

| character_set_filesystem | binary

| character_set_results | gbk

| character_set_server | latin1

| character_set_system | utf8

| character_sets_dir | C:/Program File

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

8 rows in set (0.00 sec)

mysql>

1. 中文,请确保 表中该字段的字符集为中文兼容:

big5 | Big5 Traditional Chinese

gb2312 | GB2312 Simplified Chinese

gbk | GBK Simplified Chinese

utf8 | UTF-8 Unicode

假如我们要想设定的字符集是utf8的话,步骤如下:

1)修改配置文件

在[client]下添加如下参数,影响系统变量character_set_client和character_set_connection和character_set_results

default-character-set=utf8

在[mysqld]下添加如下参数,影响系统变量character_set_server和character_set_database

default-character-set=utf8

设置完后,启动mysql,我们只需要查看系统变量是否符合我们的要求即可

character_set_client

character_set_connection

character_set_database

character_set_results

character_set_server

如下三个系统变量不需要关心,不会影响乱码

character_set_filesystem

character_set_system

character_sets_dir

修改结果:

mysql> show variables like '%char%';

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

| 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 | /mysql/share/mysql/charsets/ |

到这就完了吗?我们还没有调整字符序(collation),字符序确定在同一字符集内字符之间的比较规则

mysql> show variables like '%colla%';

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

| Variable_name | Value |

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

| collation_connection | utf8_general_ci |

| collation_database | utf8_general_ci |

| collation_server | utf8_general_ci |

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

collation_connection:在配置文件里调整[client]default-character-set就可以控制这个参数

collation_server:配置文件里调整[mysqld]collation_server=utf8_general_ci,一定要和[mysqld]default-character-set使用相同字符集

collation_database:在配置文件里调整[mysqld]default-character-set就可以控制这个参数

总的来说要想把字符集调整为utf8的话,在配置文件里需要添加如下几项

[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8

collation_server=utf8_general_ci

对于jdbc插入mysql的字段:
插入成功,但是打开mysql显示乱码,不要想着改正mysql数据库的显示,要想着继续通过jdbc读取这些数据,如果能通过System.out打印出来正确,这也是一种正确方法!!!!!!!!1111
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: