deedaa 发表于 2013-03-18 15:35

mysql写入读取的中文乱码 新整理了下 在线等

本帖最后由 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写入数据,然后读取,但是写入数据库的中文字符乱码,读取时也乱码,都为"?",英文和数字没事
原因是什么呢?

satrun7 发表于 2013-03-18 16:41

本帖最后由 satrun7 于 2013-03-18 16:42 编辑

要写入的表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/ |
+--------------------------+----------------------------------------+

deedaa 发表于 2013-03-18 16:45

回复 2# satrun7


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

有其他方法吗

satrun7 发表于 2013-03-18 17:14

本帖最后由 satrun7 于 2013-03-18 17:15 编辑

回复 3# deedaa


    你要确定你数据库表的字符集能支持中文,一般使用utf8与gbk;你可使用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肯定不能支持中文。如果你要写入表不能支持中文,须要改变表的字符集;
先备份要写入的表数据,再改变表字符集,具体命令ALTER TABLE table_name CONVERT TO CHARACTER SET 'utf8';

craaazy123 发表于 2013-03-18 18:45

你可以用mb_string和iconv转码

deedaa 发表于 2013-03-19 14:14

回复 5# craaazy123
怎么用??不太明白


   

deedaa 发表于 2013-03-19 14:21

回复 4# satrun7

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

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

   

pix77 发表于 2013-03-19 15:06

导出数据,先备份下,转个字符集很快的,要么就是用iconv函数转换吧

craaazy123 发表于 2013-03-19 16:31

deedaa 发表于 2013-03-19 14:14 static/image/common/back.gif
回复 5# craaazy123
怎么用??不太明白

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

satrun7 发表于 2013-03-19 19:13

他都说是用.net写入,为啥都说php转码函数....:sleepy:,真无言。
页: [1]
查看完整版本: mysql写入读取的中文乱码 新整理了下 在线等