`

MySQL客户端显示汉字乱码的解决

 
阅读更多
D:mysql5>.binmysqld-max-nt.exe --console

061106 20:35:21  InnoDB: Started; log sequence number 0 43655

061106 20:35:22 [Note] .binmysqld-max-nt.exe: ready for connections.

Version: '5.0.18-nt-max'  socket: ''  port: 3306  MySQL Community Edition (GPL)



Microsoft Windows XP [版本 5.1.2600]

(C) 版权所有 1985-2001 Microsoft Corp.



C:Documents and SettingsAdministrator>cd d:mysql5bin



C:Documents and SettingsAdministrator>d:



D:mysql5bin>mysql -uroot

Welcome to the MySQL monitor.  Commands end with ; or g.

Your MySQL connection id is 1 to server version: 5.0.18-nt-max



Type 'help;' or 'h' for help. Type 'c' to clear the buffer.



mysql> use test

Database changed

mysql> SHOW VARIABLES LIKE 'character_set%';

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

| Variable_name            | Value                     |

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

| character_set_client     | latin1                    |

| character_set_connection | latin1                    |

| character_set_database   | latin1                    |

| character_set_results    | latin1                    |

| character_set_server     | latin1                    |

| character_set_system     | utf8                      |

| character_sets_dir       | D:mysql5sharecharsets |

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

7 rows in set (0.00 sec)



mysql> create table ad(name varchar(32));

Query OK, 0 rows affected (0.10 sec)



mysql> insert into ad values('汉字');

Query OK, 1 row affected (0.00 sec)



mysql> select * from ad;

+------+

| name |

+------+

| 汉字 |

+------+

1 row in set (0.00 sec)



mysql>

此时,插入、显示字段的汉字值都正确。



但是如果服务器启动的时候指定了字符集参数,或者配置文件里面包含字符集参数

情况就不同了

my.ini

[mysqld]

default-character-set=gbk



D:mysql5>.binmysqld-max-nt.exe --defaults-file=my.ini --ansi --console

InnoDB: Error: log file .ib_logfile0 is of different size 0 5242880 bytes

InnoDB: than specified in the .cnf file 0 8388608 bytes!

061106 21:31:06 [Note] .binmysqld-max-nt.exe: ready for connections.

Version: '5.0.18-nt-max'  socket: ''  port: 3306  MySQL Community Edition (GPL)

061106 21:37:46 [Note] .binmysqld-max-nt.exe: Normal shutdown



061106 21:37:48 [Note] .binmysqld-max-nt.exe: Shutdown complete





D:mysql5>binmysqld-max-nt.exe --character_set_server=gbk  --console

InnoDB: Error: log file .ib_logfile0 is of different size 0 5242880 bytes

InnoDB: than specified in the .cnf file 0 8388608 bytes!

061106 21:39:55 [Note] binmysqld-max-nt.exe: ready for connections.

Version: '5.0.18-nt-max'  socket: ''  port: 3306  MySQL Community Edition (GPL)



此时,显示过去未指定字符集时建立的表并插入汉字的字段,显示是正常的



D:mysql5bin>mysql -uroot

Welcome to the MySQL monitor.  Commands end with ; or g.

Your MySQL connection id is 1 to server version: 5.0.18-nt-max



Type 'help;' or 'h' for help. Type 'c' to clear the buffer.



mysql> use test

Database changed

mysql> select * from ad;

+------+

| name |

+------+

| 汉字 |

+------+

1 row in set (0.00 sec)



mysql> SHOW VARIABLES LIKE 'character_set%';

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

| Variable_name            | Value                     |

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

| character_set_client     | latin1                    |

| character_set_connection | latin1                    |

| character_set_database   | gbk                       |

| character_set_results    | latin1                    |

| character_set_server     | gbk                       |

| character_set_system     | utf8                      |

| character_sets_dir       | D:mysql5sharecharsets |

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

7 rows in set (0.00 sec)

这个时候建立的表并插入汉字的字段,不能正确显示

mysql> create table ad2(name varchar(32));

Query OK, 0 rows affected (0.06 sec)



mysql> insert into ad2 values('汉字');

Query OK, 1 row affected, 1 warning (0.01 sec)



mysql> select * from ad2;

+------+

| name |

+------+

| ??? |

+------+

1 row in set (0.01 sec)

如果只在客户端设定character_set_results参数,那么不管服务器端是什么字符集时建立、插入汉字的表都显示不正确

mysql> set character_set_results='gbk';

Query OK, 0 rows affected (0.00 sec)



mysql> SHOW VARIABLES LIKE 'character_set%';

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

| Variable_name            | Value                     |

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

| character_set_client     | latin1                    |

| character_set_connection | latin1                    |

| character_set_database   | gbk                       |

| character_set_results    | gbk                       |

| character_set_server     | gbk                       |

| character_set_system     | utf8                      |

| character_sets_dir       | D:mysql5sharecharsets |

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

7 rows in set (0.00 sec)



mysql> select * from ad2;

+-------+

| name  |

+-------+

| ??×? |

+-------+

1 row in set (0.00 sec)



mysql> select * from ad;

+-------+

| name  |

+-------+

| ??×? |

+-------+

1 row in set (0.00 sec)

如果再设定character_set_client,效果和只设定character_set_results没有什么差别

mysql> set character_set_client='gbk';

Query OK, 0 rows affected (0.00 sec)



mysql> select * from ad;

+-------+

| name  |

+-------+

| ??×? |

+-------+

1 row in set (0.00 sec)



mysql> select * from ad2;

+-------+

| name  |

+-------+

| ??×? |

+-------+

1 row in set (0.00 sec)



mysql> create table ad3(name varchar(32));

Query OK, 0 rows affected (0.05 sec)



mysql> insert into ad3 values('汉字');

Query OK, 1 row affected (0.00 sec)



mysql> select * from ad3;

+------+

| name |

+------+

| ??   |

+------+

1 row in set (0.01 sec)



mysql> SHOW VARIABLES LIKE 'character_set%';

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

| Variable_name            | Value                     |

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

| character_set_client     | gbk                       |

| character_set_connection | latin1                    |

| character_set_database   | gbk                       |

| character_set_results    | gbk                       |

| character_set_server     | gbk                       |

| character_set_system     | utf8                      |

| character_sets_dir       | D:mysql5sharecharsets |

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

7 rows in set (0.00 sec)

如果再设定character_set_connection,不影响已经建立和插入的表,但是新建立、插入汉字的表就能正确显示

mysql> set character_set_connection='gbk';

Query OK, 0 rows affected (0.00 sec)



mysql> select * from ad3;

+------+

| name |

+------+

| ??   |

+------+

1 row in set (0.00 sec)



mysql> select * from ad2;

+-------+

| name  |

+-------+

| ??×? |

+-------+

1 row in set (0.00 sec)



mysql> select * from ad;

+-------+

| name  |

+-------+

| ??×? |

+-------+

1 row in set (0.00 sec)



我们可以查看各个表的字符集

mysql> show create table ad;

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

| Table | Create Table                                                                                 |

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

| ad    | CREATE TABLE `ad` (

  `name` varchar(32) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

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

1 row in set (0.00 sec)



mysql> show create table ad2;

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

| Table | Create Table                                                                               |

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

| ad2   | CREATE TABLE `ad2` (

  `name` varchar(32) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=gbk |

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

1 row in set (0.00 sec)



mysql> show create table ad3;

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

| Table | Create Table                                                                               |

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

| ad3   | CREATE TABLE `ad3` (

  `name` varchar(32) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=gbk |

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

1 row in set (0.00 sec)

此时新建的表、此时插入汉字,显示就正确了

mysql> set character_set_client=gbk;

Query OK, 0 rows affected (0.00 sec)



mysql> set character_set_connection=gbk;

Query OK, 0 rows affected (0.00 sec)



mysql> set character_set_results=gbk;

Query OK, 0 rows affected (0.00 sec)



mysql> create table ad4(name varchar(32));

Query OK, 0 rows affected (0.06 sec)



mysql> insert into ad4 values('汉字');

Query OK, 1 row affected (0.00 sec)



mysql> select * from ad;

+-------+

| name  |

+-------+

| ??×? |

+-------+

1 row in set (0.00 sec)



mysql> select * from ad4;

+------+

| name |

+------+

| 汉字 |

+------+

1 row in set (0.00 sec)



mysql> create table ad5(name varchar(32)) DEFAULT CHARSET=gbk;

Query OK, 0 rows affected (0.10 sec)



mysql> insert into ad5 values('汉字');

Query OK, 1 row affected (0.00 sec)



mysql> select * from ad5;

+------+

| name |

+------+

| 汉字 |

+------+

1 row in set (0.00 sec)



mysql> select * from ad4;

+------+

| name |

+------+

| 汉字 |

+------+

1 row in set (0.00 sec)



mysql> show create table ad4;

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

| Table | Create Table                                                                               |

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

| ad4   | CREATE TABLE `ad4` (

  `name` varchar(32) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=gbk |

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

1 row in set (0.00 sec)



mysql> show create table ad5;

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

| Table | Create Table                                                                               |

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

| ad5   | CREATE TABLE `ad5` (

  `name` varchar(32) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=gbk |

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

1 row in set (0.00 sec)



mysql> show create table ad3;

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

| Table | Create Table                                                                               |

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

| ad3   | CREATE TABLE `ad3` (

  `name` varchar(32) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=gbk |

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

1 row in set (0.00 sec)



mysql> exit

Bye
 
分享到:
评论

相关推荐

    mysql汉字乱码问题

    总之,解决MySQL中的汉字乱码问题需要从多个层面进行检查和调整,确保字符集在整个数据处理链路中的一致性。理解字符集和编码的概念,以及它们在MySQL中的应用,对于避免和解决这类问题至关重要。

    MySQL存数据时乱码解决

    2. **确保客户端与服务器的字符集匹配**:确保你的应用程序(如PHP脚本或MySQL客户端工具)在连接数据库时指定正确的字符集,例如在PHP中可以使用`mysql_set_charset('utf8')`,或者在命令行中使用`--default-...

    解决C#操作Mysql时中文乱码问题(真的解决了)

    在连接字符串中,添加`charset=utf8`或者`charset=utf8mb4`参数,告诉MySQL客户端使用哪种字符集。如下所示: ```csharp string connectionString = "server=localhost;user=root;database=mydb;port=3306;password...

    mysql乱码解决问题

    假设我们需要解决一个使用GB2312编码的客户端向使用GBK编码的MySQL服务器发送数据时出现的乱码问题。 1. **检查服务器端字符集设置** - 登录MySQL服务器,执行: ```sql SHOW VARIABLES LIKE 'character%'; ```...

    7、命令行客户端出现乱码的解决方案1

    标题提及的"7、命令行客户端出现乱码的解决方案1",指的是在使用命令行工具(如Windows的cmd或Linux的Terminal)连接MySQL数据库时,由于字符编码不匹配导致显示的乱码现象。这种问题通常发生在输入或输出含有非...

    MYSQL字符集与乱码问题分析

    针对“mysql客户端插入中文内容后再查询却返回乱码”等问题,解决策略通常包括: - 确保客户端和服务器端的字符集一致; - 使用正确的字符集进行数据导入和导出; - 在连接数据库时明确指定字符集; - 更新数据库表...

    express中文乱码解决

    ### Express 中文乱码解决方法 在Web开发中,尤其是使用Node.js的Express框架进行后端开发时,处理中文字符可能会遇到乱码问题。这通常是因为客户端与服务器之间的编码设置不一致导致的。本文将详细介绍如何在...

    MYSQL在WINDOWS下中文显示的解决办法

    解决这个问题需要对MySQL的配置、数据表创建以及客户端连接进行相应的调整。以下是一份详细的步骤指南: 1. **确认MySQL版本**: 首先,确保你的MySQL服务器版本是5.1.55或更高。不同版本的MySQL可能对字符集的...

    MYSQL中文乱码 xx

    通过以上步骤,可以有效地解决MySQL中的中文乱码问题,确保数据的正确读取和显示。然而,值得注意的是,一旦数据库中已有数据,更改字符集可能需要额外的转换步骤,这可能会导致数据丢失或损坏,因此在执行任何变更...

    mysql 插入中文读取中文无乱码 2

    以下是一些关键知识点,帮助你理解和解决MySQL中文乱码问题。 1. **字符集与编码** - **字符集(Character Set)**:指的是字符的集合,如ASCII、GBK、UTF-8等,它定义了可以表示哪些字符。 - **编码(Collation...

    润乾报表乱码问题

    润乾报表乱码问题尤其令人头疼,因为它影响了数据的显示和传输,尤其是对于汉字而言,乱码使得数据几乎无法阅读和使用。 首先,报表乱码问题分为多种类型,包括页面显示乱码、导出文件乱码和参数乱码。页面显示乱码...

    Mysql彻底解决中文乱码问题的方案(Illegal mix of collations for operation)

    总之,解决MySQL中文乱码问题的关键在于确保所有层次的字符集设置保持一致,特别是客户端、服务器、数据库和表。通过正确配置和理解这些字符集,可以有效地避免"Illegal mix of collations for operation"的错误,...

    MySQL插入中文数据报错乱码,cmd命令行窗口中文显示乱码——问题解决

    在使用MySQL数据库时,有时会遇到中文数据插入后出现乱码的问题,这通常是由于字符集配置不正确导致的。在Windows环境下,通过CMD命令行窗口操作数据库时,也可能出现中文显示乱码的情况。本文将详细解释这个问题的...

    J2EE平台下的乱码问题分析及解决

    此外,解决汉字乱码问题还需要注意如下几点心得: - 对于不同版本的Java,它们的默认编码可能不同,需要根据实际的Java版本进行相应的编码设置。 - 在进行国际化软件开发时,应该避免在系统中使用默认编码,而应该...

    PHP与MySQL Web应用平台中文乱码问题研究.pdf

    1. MySQL服务器和客户端的字符集设置:`character_set_server`和`character_set_client`分别代表服务器和客户端的默认字符集。如果不一致,数据在传输过程中可能会出现编码转换问题。 2. 数据库、表和列的字符集:...

    Mysql的longblob字段插入数据问题解决

    总之,解决MySQL `LONGBLOB`字段插入数据问题的关键在于理解和调整`max_allowed_packet`配置,同时注意客户端和服务器端都需要进行相应的设置。通过以上步骤,可以有效地解决因数据包过大而引发的插入异常。

    php写入mysql中文乱码的实例解决方法

    综上所述,解决PHP写入MySQL中文乱码问题需要多方面配合,包括源文件编码、数据库连接设置、数据库和表的字符集,以及SQL语句前的设置。只有当这些环节都保持一致,才能确保中文数据正确无误地写入和读取。在实际...

    中文乱码解决方法(已验证).docx

    2. 通用策略:确保服务器、客户端(浏览器)、数据库等所有环节的字符编码一致,避免在数据传输过程中出现乱码。 总结,处理中文乱码问题的关键在于理解编码和解码的过程,以及在各个层次(如服务器、浏览器、...

Global site tag (gtag.js) - Google Analytics