MySQL中文乱码解决方法
来源:互联网 发布:mac 数学公式 编辑:程序博客网 时间:2024/05/29 08:32
分步骤进行
一、设置字符集为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;
之后重新执行一遍上面的语句,成功!
根据我的思考,此处缘由应该是这样:
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程序还是要进行相应的转换。
一、设置字符集为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;
之后重新执行一遍上面的语句,成功!
根据我的思考,此处缘由应该是这样:
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中文乱码解决方法
- MySQL中文乱码解决方法
- mysql中文乱码解决方法
- MySql中文乱码解决方法
- mysql 中文乱码解决方法
- MySQL中文乱码解决方法
- mysql中文乱码解决方法
- mysql中文乱码解决方法
- MySql中文乱码的解决方法
- MySql中文乱码的解决方法
- mysql 中文乱码解决方法集锦
- MySQL 4.1中文乱码解决方法
- Mysql中文乱码的解决方法
- hibernate,mysql中文乱码解决方法
- MySql数据库中文乱码解决方法
- mySQL数据库中文乱码解决方法
- Mysql中文乱码的解决方法
- mysql中文乱码解决方法集锦
- UML中的关联方式的区分
- Java中获取当前运行代码的类名、方法名、行号
- ArcGIS相关帮助网址大全——[更新了ArcGIS10.2的帮助信息]
- 【转】建立隐藏盘
- 分析人使用互联网的习惯可揭示是否有得抑郁症
- MySQL中文乱码解决方法
- tcpdump
- VMware Workstation 8.0.0 Build 471780 官方正式版发布
- H264参数结构一:元素的分层结构
- 60多年前,一群小白程序员扒了一个俄罗斯的开源框架
- 火车票订票系统的几点优化思考
- org.dozer浅析
- 小米CEO雷军的烦恼:遇周鸿祎挑衅
- oracle 自我总结