MySQL中文乱码解决方法(原创)

本人之前下载了一款用于可视化操作MySQL数据的软件 Navicat 8 for MySQL,挺好用的,顺便也可用于测试一下中文乱码问题是否解决

分步骤进行

一、设置字符集为UTF8
首先,如果要在数据库中存储中文数据,个人建议将数据库的字符集设置为utf8
当你调用CREATE DATABASE onedbname;时,MySQL会根据默认字符集来设置新建的数据库的字符集,所以为方便起见应该在建立数据库之前设置数据库的默认字符集
找到MySQL安装的目录(如E:\Program Files\MySQL\MySQL Server 5.1\),找到my.ini文件,进行如下修改(方法在网上搜的,测试成功):
    1、[mysql]下的
    default-character-set=latin1
    改为
    default-character-set=utf8
   
    2、[mysqld]下的
    default-character-set=latin1
    改为
    default-character-set=utf8
这样,就将MySQL数据库的默认字符集设置为utf8了

重新启动MySQL数据库,这个命令行命令不了解,我使用的方法如下:
控制面板->管理工具->服务,找到MySQL服务(若未找到,可以通过mysqld --install命令安装服务),结束掉,然后重新开启。

你可以用Navicat的可视化界面创建数据库,创建表,插入数据,你可以看到文本数据使用的是utf8编码,查看16进制数据,可以看到每个汉字占用3个字节(不知是否中文都如此)。

你也可以用mysql命令行创建数据库,创建表。当你执行一条插入命令带有中文时应该会出错!!!往下看!

二、命令行中插入与获取UTF8格式数据
进行了第一步的设置后,你执行如下命令
INSERT INTO tableName(id, lable) VALUES(100, '巨蚁很牛叉');
出错!你需要先执行下面一个命令
SET NAMES GBK;

之后重新执行一遍上面的语句,成功!
情感日志www.lovewenzhang.com
根据我的思考,此处缘由应该是这样:
    MySQL不希望字符集问题给用户造成诸多不便,增加了一个将命令行的字符串转换为数据库所需字符集的字符串,比如我们一般在控制台输入的中文,一个字符都占用2个字节,通过SET NAMES GBK来说明我们的输入中含有中文需要进行相应转换。
    根据我刚刚对GBK编码的测试,我发现竟然和之前设置成UTF8的文本数据完全一样,在网上搜的GBK中文占用2字节,感觉甚是奇怪,究竟什么原因以后深入研究下应该可以明确。

上面的问题当你在执行SELECT语句时情况一样。
总之,当你要在命令行中处理有UTF8字符集的数据时,先调用一局SET NAMES GBK 就行了!

三、程序中处理插入与获取数据库中字符串数据
有一天夜里为在我的使用UNICODE的C++ WIN32控制台程序中显示中文,伤透了脑筋,之后第二天中午解决了,解决办法是我直接获取了UTF8字符数据,然后调用 MultiByteToWideChar(CP_UTF8, ...)转换为UNICODE字符串即可用_cwprintf进行显示。
如果要Insert中文数据的话,就不能直接传递字符串了,需要先将UNICODE字符串转换为UTF8格式的连续字节,然后发送命令的话传递一段连续的字节,应该有些麻烦。

现在可以采用第二步的方法,执行SQL命令 SET NAMES GBK,万事大吉,具体就不细说了,进行测试无误,不过对于UNICODE程序还是要进行相应的转换。

写了这么多,时间不早了,希望能给初使用MySQL的同行一些帮助...

时间: 2024-10-02 22:01:17

MySQL中文乱码解决方法(原创)的相关文章

python sqlobject(mysql)中文乱码解决方法_python

UnicodeEncodeError: 'latin-1' codec can't encode characters in position: 找了一天终于搞明白了,默认情况下,mysql连接的编码是latin-1,你需要指定使用什么编码方式: connectionForURI(mysql://user:password@localhost:3306/eflow?use_unicode=1&charset=utf8) Python mysql 中文乱码 的解决方法,有需要的朋友不妨看看. 先来

mysql 中文乱码 解决方法集锦_Mysql

第一个方法: MySQL 4.1 中文乱码的问题 最近要将 MySQL 4.0 升级到 MySQL 4.1 ,发现了中文乱码的问题,希望以下见解对大家有用. 1. MySQL 4.1 在文字上有很大改进,它有了 Character Set 与 Collation 的慨念. 2. 在 MySQL 4.0 ,一般的程式都会将文字以拉丁文 ( latin) 来储存,就算我们输入中文字,结果仍是放在以拉丁文设置的文字栏里头,这对 MySQL 4.0 与以 MySQL 4.0 为基楚的程式来说,并不会有问

mysql中文乱码解决方法

找到mysql教程的配置文件 mysql的配置文件就是/etc/init.d/mysql/my.cnf.(如果不是ubuntu9.0.4,这个文件并不一定存在,由于你可能采取的MySQL安装方式跟网上所说的不一样,就不一定能够找得到/etc/init.d/mysql/my.cnf.因此,你需要使用find命令查找cnf文件.记得不要去找my.cnf因为它不一定存在,而应该找*.cnf. 2.修改前应该备份一下cp /etc/init.d/mysql/my.cnf /etc/my.cnf.bak

ajax中文乱码解决方法总结

ajax乱码解决办法一: 在服务器指定发送数据的格式: 在jsp文件中: response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件 或是 response.setContentType("text/xml;charset=UTF-8");//返回的xml文件 PHP:header("Content-Type:text/html;charset=GB2312"); ajax乱码

数据库 MySQL中文乱码解决办法总结

MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 create table user(name varchar(11)); # 创建user表 insert into table user("carl"); # 添加数据 select * from user; insert into user value(&

php excel reader2.21导出excel中文乱码解决方法说明

之前我的PHP教程博客访友询问使用php excel reader2.21导出excel时中文出现乱码如何解决,现我说明下php excel reader导出excel中文乱码的解决方法,希望对使用php excel reader导出excel的朋友有所帮助. php excel reader介绍 php excel reader是一个读取Excel xsl文件内容的一个php excel类,目前最新版本是php excel reader2.21,网上可自行搜索,sourceforge上的php

【技术贴】java插入mysql中文乱码解决|java插入mysql数据库显示问号?

[技术贴]java插入mysql中文乱码解决|java插入mysql数据库显示问号?   在你要连接到mysql 的代码里写上?useUnicode=true&characterEncoding=UTF-8" 比如 "jdbc:mysql://localhost:3306/chenluancl1?useUnicode=true&characterEncoding=UTF-8", "root","密码"

使用WebLogic的OTN插件时Eclipse控制台输出中文乱码解决方法

  使用WebLogic时控制台输出中文乱码解决方法1.找到weblogic安装目录,当前项目配置的domain2.找到startWebLogic.cmd文件3.打开文件,在"call "%DOMAIN_HOME%\bin\startWebLogic.cmd" %*"上面增加如下代码即可,主要是设置UTF-8啊. @ECHO OFF @REM WARNING: This file is created by the Configuration Wizard. @RE

python 中文乱码解决方法

比如我从网上下载一些信息或写个电子邮件程序下载到本地,以记事本(txt) 形式写入并保存在本地计算机,为什么看到只是英文和乱码的?该怎样做呢? 答 乱码原因: 因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了. 解决方法: 在控制台打印的地方用一个转码就ok了,打印的时候这么写: print myname.decode('utf-8').encode('gb