Home > Database > Mysql Tutorial > body text

mysql5 插入中文乱码问题

WBOY
Release: 2016-06-07 17:53:09
Original
976 people have browsed it

我们经常会碰到mysql数据库保存中文乱码这个问题,今天我又碰到了,我的原因是以前使用的是latin1的默认编码, 以前的程序插入中文乱码 ,以前的写法:在source中加入charset=gb2312,然后在插入前执行set names gb2312即可

latin1即是iso8859-1, 所以在插入之前需要将内容转换为iso8859-1, 如下:

 代码如下 复制代码

Encoding iso88591 = Encoding.GetEncoding("iso8859-1");
Encoding df = Encoding.Default;
 
byte[] gb2312bytes = df.GetBytes(content);
 //byte[] asciiBytes = Encoding.Convert(df, iso88591, gb2312bytes);
tring str = iso88591.GetString(gb2312bytes);

这样转换之后 ,source中不用加入charset参数 ,程序中也不需要先执行set names **, 即可正常插入

如果是mysql服务器我们不知道编码可参考下面方法解决


mysql的字符集是utf8的,光看这点害人不浅。登录,mysql -uroot -p,进入mysql。
  命令:SHOW VARIABLES LIKE 'character_set_%';

 代码如下 复制代码
  +--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

只有character_set_system是utf8。
vi /etc/my.cnf
mysql的默认配置文件以及目录
编辑如下:
[mysqld]

 代码如下 复制代码

default-character-set=utf8

 之后:service mysql stop
service mysql start

重启后,再次查看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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

此时,character_set_database已经是utf8,工程已经不再乱码。

 

可以再添加如下一句:

 代码如下 复制代码


[client]

default-character-set=utf8


也可登录的时候, 要用以下命令:mysql --default-character-set=utf8 -u root -p
则:

 代码如下 复制代码
+--------------------------+----------------------------+
| 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       | /usr/share/mysql/charsets/ |

最后如果你是php连接mysql中文乱码可参考下办法解决


就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的消除乱码,对于GBK的则使用SET NAMES GBK,代码如下:

 代码如下 复制代码

$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_query("SET NAMES 'GBK'");

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template