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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 本人之前下载了一款用于可视化操作MySQL数据的软件 Navicat 8 for MySQL,挺好用的,顺便也可用于测试一下中文乱码问题是否解决分步骤进行一、设置字符集为UTF8首先,如果要在数据库中存储中文数据,个人建议将数据库的字符集设...
本人之前下载了一款用于可视化操作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的同行一些帮助...
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL 数据库
MySQL忘记root密码、远程无法连接的解决方法
MySQL忘记root密码、远程无法连接的解决方法
|
1月前
|
关系型数据库 MySQL 数据安全/隐私保护
关于Navicat Premium连接MySQL出现2059错误解决方法
关于Navicat Premium连接MySQL出现2059错误解决方法
|
2月前
|
关系型数据库 MySQL Docker
MySQL 5.7 timestamp类型设置default value为'0000-00-00 00:00:00'报错的解决方法
MySQL 5.7 timestamp类型设置default value为'0000-00-00 00:00:00'报错的解决方法
|
1月前
|
缓存 关系型数据库 MySQL
MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
|
5月前
|
关系型数据库 MySQL 数据库
连接MySQL时报错:Public Key Retrieval is not allowed的解决方法
连接MySQL时报错:Public Key Retrieval is not allowed的解决方法
165 1
|
3月前
|
关系型数据库 MySQL Java
windows下mybatis插入mysql数据中文乱码问题解决
windows下mybatis插入mysql数据中文乱码问题解决
|
4月前
|
关系型数据库 MySQL Linux
MySQL【部署 01】Linux root 用户部署 mysql-5.7.28 及 not allowed to connect to this MySQL server 和中文乱码问题处理
MySQL【部署 01】Linux root 用户部署 mysql-5.7.28 及 not allowed to connect to this MySQL server 和中文乱码问题处理
49 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL安装运行问题及解决方法
MySQL安装运行问题及解决方法
36 0
|
4月前
|
SQL 前端开发 关系型数据库
MySQL 锁表后快速解决方法
MySQL 锁表后快速解决方法
75 1
|
4月前
|
关系型数据库 MySQL 数据库
mysql创建用户角色后无法登陆_解决方法
mysql创建用户角色后无法登陆_解决方法
52 0