免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2525 | 回复: 9
打印 上一主题 下一主题

mysql写入读取的中文乱码 新整理了下 在线等 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-18 15:35 |只看该作者 |倒序浏览
本帖最后由 deedaa 于 2013-03-19 14:34 编辑

mysql数据库:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set

表:
mysql> show create table mailbox;
| Table   | Create Table                                                                                                                                                 | mailbox | CREATE TABLE `mailbox` (
  `username` varchar(255) NOT NULL default '',
  `question` text NOT NULL,
  `answer` text NOT NULL,
  `autoreply` smallint(1) default NULL,
  `autoreplycontent` text,
  PRIMARY KEY  (`username`),
  KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Mailboxes' |


程序部分:

MySqlConnection="server=192.168.10.10;user id=root;password=123456;database=;charset=utf8"


现在我使用.net向mysql写入数据,然后读取,但是写入数据库的中文字符乱码,读取时也乱码,都为"?",英文和数字没事
原因是什么呢?

论坛徽章:
0
2 [报告]
发表于 2013-03-18 16:41 |只看该作者
本帖最后由 satrun7 于 2013-03-18 16:42 编辑

要写入的表
  1. ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name;
复制代码
如果你当前的条件允许,最好统一数据库所有表的编码,能支持中文字符集一般使用utf8与gbk;下面是一个mysql utf8的配置:
+--------------------------+----------------------------------------+
| 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/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+

论坛徽章:
0
3 [报告]
发表于 2013-03-18 16:45 |只看该作者
回复 2# satrun7


   现在数据库里面有数据,没法改啊

有其他方法吗

论坛徽章:
0
4 [报告]
发表于 2013-03-18 17:14 |只看该作者
本帖最后由 satrun7 于 2013-03-18 17:15 编辑

回复 3# deedaa


    你要确定你数据库表的字符集能支持中文,一般使用utf8与gbk;你可使用
  1. SHOW CREATE TABLE table_name;
复制代码
查看你的表是否支持中文,如下面mysql> SHOW CREATE table test3;
+-------+--------------------------------------------------------
-----------------------------------------------------------------
---------+
| Table | Create Table

         |
+-------+--------------------------------------------------------
-----------------------------------------------------------------
---------+
| test3 | CREATE TABLE `test3` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` year(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------
-----------------------------------------------------------------
---------+
像latin1肯定不能支持中文。如果你要写入表不能支持中文,须要改变表的字符集;
先备份要写入的表数据,再改变表字符集,具体命令
  1. ALTER TABLE table_name CONVERT TO CHARACTER SET 'utf8';
复制代码

论坛徽章:
6
CU大牛徽章
日期:2013-05-20 10:43:41IT运维版块每日发帖之星
日期:2016-07-29 06:20:00IT运维版块每日发帖之星
日期:2016-01-27 06:20:00CU大牛徽章
日期:2013-05-20 10:44:16CU大牛徽章
日期:2013-05-20 10:44:0615-16赛季CBA联赛之广东
日期:2018-03-09 11:17:08
5 [报告]
发表于 2013-03-18 18:45 |只看该作者
你可以用mb_string和iconv转码

论坛徽章:
0
6 [报告]
发表于 2013-03-19 14:14 |只看该作者
回复 5# craaazy123
怎么用??不太明白


   

论坛徽章:
0
7 [报告]
发表于 2013-03-19 14:21 |只看该作者
回复 4# satrun7

运行 show create table tb1;
后各个字段都是varchar()型
最后一点:
KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Virtual Mailboxes' |
应该是默认的字符集为latin1

可是使用这个表的一个系统将中文字符存到数据表里时内容虽然乱码,但是他系统读取出来还是正常的中文字符。
所以我觉得应该和编程存取值有关,而不能轻易改数据库属性

   

论坛徽章:
0
8 [报告]
发表于 2013-03-19 15:06 |只看该作者
导出数据,先备份下,转个字符集很快的,要么就是用iconv函数转换吧

论坛徽章:
6
CU大牛徽章
日期:2013-05-20 10:43:41IT运维版块每日发帖之星
日期:2016-07-29 06:20:00IT运维版块每日发帖之星
日期:2016-01-27 06:20:00CU大牛徽章
日期:2013-05-20 10:44:16CU大牛徽章
日期:2013-05-20 10:44:0615-16赛季CBA联赛之广东
日期:2018-03-09 11:17:08
9 [报告]
发表于 2013-03-19 16:31 |只看该作者
deedaa 发表于 2013-03-19 14:14
回复 5# craaazy123
怎么用??不太明白


百度一下,或者看php官方文档呀

论坛徽章:
0
10 [报告]
发表于 2013-03-19 19:13 |只看该作者
他都说是用.net写入,为啥都说php转码函数....,真无言。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP