关于MYSQL在UTF-8字符集下乱码的解决办法

from http://www.itxx.com.cn/data/mysql/data_1969.html

怎样解决MYSQL数据库在UTF-8字符集下乱码?经常会有人遇到这样的问题,MYSQL数据库在UTF-8字符集下是乱码的,去网上搜了以下找到的答案都不理想,下面中国信息港就与大家分享下关于MYSQL在UTF-8字符集下乱码的解决办法的问题!

    由于能直接在MYSQL数据库里添加中文数据,并且能正常显示,说明我的表都使用了正确的字符编码,经过查看后,确认了,我全部的表以及字段都使用了UTF-8的编码,但是为什么程序添加的中文数据就不行呢?

其 实,原因在于MYSQL服务器使用的默认编码,以及数据库的默认编码,很多人已经很小心的在建立表时关注表的字符编码,却忽略了数据库的字符编码,而在没 指定数据库的字符编码时,创建的数据库就使用MYSQL服务器的默认编码,但是,如果MYSQL服务器的配置文件没有指定编码时,很可能就是使用的 latin1编码.

查看服务器和数据库使用何种编码的MYSQL命令为:SHOW VARIABLES LIKE 'character_set_%';  以及 SHOW VARIABLES LIKE 'collation_%'; 看到里面使用的编码了,我本应该使用的是utf8,所以,不是utf8的,那就说明问题在这里了.

运行命令:SHOW VARIABLES LIKE 'character_set_%'; 结果如下

'character_set_client', 'utf8'

'character_set_connection', 'utf8'

'character_set_database', 'latin1'

'character_set_filesystem', 'binary'

'character_set_results', 'utf8'

'character_set_server', 'latin1'

'character_set_system', 'utf8'

'character_sets_dir', 'D:\soft_work\mysql\share\charsets\'

果然发现有几个不对的

运行命令:SHOW VARIABLES LIKE 'collation_%'; 结果如下

'collation_connection', 'utf8_general_ci'

'collation_database', 'latin1_general_ci'

'collation_server', 'latin1_general_ci'

那怎么办呢,只要把那几个的编码改成utf8的,那应该就可以了.

1: 在Mysql的配置文件 my.ini (一般在c:/windows/下面) 里加上服务器的默认编码配置: default-character-set=utf8

2: 修 改你的数据库的字符编码:进入Mysql数据库,通过命令修改你的数据库字符编码: ALTER DATABASE `databaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci  (修改后需要重启Mysql数据库)

3: 如果你的表以及表里的字段使用了不正确的字符编码,同样需要修正过来:命令:

 修改表的编码: ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

修改字段的编码: ALTER TABLE `tableName` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL

(做好了时,再跑一下上面那两个查看字符编码的命令,看看是否全部都变成了utf8)

4: 如 果还无效的话,再尝试使用这个MYSQL数据库连接字符串:  jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=UTF-8 (有时可能需要将符号(&)转码写成(&))

 

==============================================================

补充材料一:

==============================================================

mysql字符编码是版本4.1引入的,支持多国语言,而且一些特性已经超过了其他的数据库系统。

我们可以在MySQL Command Line Client 下输入如下命令查看mysql的字符集

mysql> SHOW CHARACTER SET;

+----------+-----------------------------+---------------------+--------+

| Charset  | Description                 | Default collation   | Maxlen |

+----------+-----------------------------+---------------------+--------+

| big5     | Big5 Traditional Chinese    | big5_chinese_ci     | 2      |

| dec8     | DEC West European           | dec8_swedish_ci     | 1      |

| cp850    | DOS West European           | cp850_general_ci    | 1      |

| hp8      | HP West European            | hp8_english_ci      | 1      |

| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    | 1      |

| latin1   | cp1252 West European        | latin1_swedish_ci   | 1      |

| latin2   | ISO 8859-2 Central European | latin2_general_ci   | 1      |

| swe7     | 7bit Swedish                | swe7_swedish_ci     | 1      |

| ascii    | US ASCII                    | ascii_general_ci    | 1      |

| ujis     | EUC-JP Japanese             | ujis_japanese_ci    | 3      |

| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    | 2      |

| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   | 1      |

| tis620   | TIS620 Thai                 | tis620_thai_ci      | 1      |

| euckr    | EUC-KR Korean               | euckr_korean_ci     | 2      |

| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    | 1      |

| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   | 2      |

| greek    | ISO 8859-7 Greek            | greek_general_ci    | 1      |

| cp1250   | Windows Central European    | cp1250_general_ci   | 1      |

| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      | 2      |

| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   | 1      |

| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci | 1      |

| utf8     | UTF-8 Unicode               | utf8_general_ci     | 3      |

| ucs2     | UCS-2 Unicode               | ucs2_general_ci     | 2      |

| cp866    | DOS Russian                 | cp866_general_ci    | 1      |

| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  | 1      |

| macce    | Mac Central European        | macce_general_ci    | 1      |

| macroman | Mac West European           | macroman_general_ci | 1      |

| cp852    | DOS Central European        | cp852_general_ci    | 1      |

| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   | 1      |

| cp1251   | Windows Cyrillic            | cp1251_general_ci   | 1      |

| cp1256   | Windows Arabic              | cp1256_general_ci   | 1      |

| cp1257   | Windows Baltic              | cp1257_general_ci   | 1      |

| binary   | Binary pseudo charset       | binary              | 1      |

| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  | 1      |

| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   | 2      |

| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci | 3      |

+----------+-----------------------------+---------------------+--------+

36 rows in set (0.02 sec)

更多mysql的字符集知识可以参考本论坛的

http://www.phpfans.net/bbs/viewt ... &extra=page%3D1

 

字 符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:

mysql> SHOW VARIABLES LIKE 'character_set_%';

+--------------------------+-------------------------------------------+

| Variable_name            | Value                                     |

+--------------------------+-------------------------------------------+

| character_set_client     | latin1                                    |

| character_set_connection | latin1                                    |

| character_set_database   | latin1                                    |

| character_set_filesystem | binary                                    |

| character_set_results    | latin1                                    |

| character_set_server     | latin1                                    |

| character_set_system     | utf8                                      |

| character_sets_dir       | D:\MySQL\MySQL Server 5.0\share\charsets\ |

+--------------------------+-------------------------------------------+

8 rows in set (0.06 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';

+----------------------+-------------------+

| Variable_name        | Value             |

+----------------------+-------------------+

| collation_connection | latin1_swedish_ci |

| collation_database   | latin1_swedish_ci |

| collation_server     | latin1_swedish_ci |

+----------------------+-------------------+

3 rows in set (0.02 sec)

 

 

==============================================================

补充材料二: mysql字符集编码详细说明

==============================================================

mysql字符集编码

字符集和整理

整理 描述

armscii8   (ARMSCII-8 Armenian)

armscii8_bin   亚美尼亚语,   二进制

armscii8_general_ci  亚美尼亚语,   不区分大小写

ascii    (US ASCII)

ascii_bin   西欧 (多语言),   二进制

ascii_general_ci  西欧 (多语言),   不区分大小写

big5    (Big5 Traditional Chinese)

big5_bin   繁体中文,   二进制

big5_chinese_ci  繁体中文,   不区分大小写

binary    (Binary pseudo charset)

binary    二进制

cp1250    (Windows Central European)

cp1250_bin   中欧 (多语言),   二进制

cp1250_croatian_ci  克罗地亚语,   不区分大小写

cp1250_czech_cs  捷克语,   区分大小写

cp1250_general_ci  中欧 (多语言),   不区分大小写

cp1251    (Windows Cyrillic)

cp1251_bin   西里尔语 (多语言),  二进制

cp1251_bulgarian_ci  保加利亚语,   不区分大小写

cp1251_general_ci  西里尔语 (多语言),  不区分大小写

cp1251_general_cs  西里尔语 (多语言),  区分大小写

cp1251_ukrainian_ci  乌克兰语,   不区分大小写

cp1256    (Windows Arabic)

cp1256_bin   阿拉伯语,   二进制

cp1256_general_ci  阿拉伯语,   不区分大小写

cp1257    (Windows Baltic)

cp1257_bin   巴拉克语 (多语言),  二进制

cp1257_general_ci  巴拉克语 (多语言),  不区分大小写

cp1257_lithuanian_ci  立陶宛语,   不区分大小写

cp850    (DOS West European)

cp850_bin   西欧 (多语言),   二进制

cp850_general_ci  西欧 (多语言),   不区分大小写

cp852    (DOS Central European)

cp852_bin   中欧 (多语言),   二进制

cp852_general_ci  中欧 (多语言),   不区分大小写

cp866    (DOS Russian)

cp866_bin   俄语,    二进制

cp866_general_ci  俄语,    不区分大小写

cp932    (SJIS for Windows Japanese)

cp932_bin   日语,    二进制

cp932_japanese_ci  日语,    不区分大小写

dec8    (DEC West European)

dec8_bin   西欧 (多语言),   二进制

dec8_swedish_ci  瑞典语,   不区分大小写

eucjpms   (UJIS for Windows Japanese)

eucjpms_bin   日语,    二进制

eucjpms_japanese_ci  日语,    不区分大小写

euckr (EUC-KR Korean)

euckr_bin   朝鲜语,   二进制

euckr_korean_ci  朝鲜语,   不区分大小写

gb2312    (GB2312 Simplified Chinese)

gb2312_bin   简体中文,   二进制

gb2312_chinese_ci  简体中文,   不区分大小写

gbk    (GBK Simplified Chinese)

gbk_bin   简体中文,   二进制

gbk_chinese_ci   简体中文,   不区分大小写

geostd8   (GEOSTD8 Georgian)

geostd8_bin   乔治亚语,   二进制

geostd8_general_ci  乔治亚语,   不区分大小写

greek    (ISO 8859-7 Greek)

greek_bin   希腊语,   二进制

greek_general_ci  希腊语,   不区分大小写

hebrew    (ISO 8859-8 Hebrew)

hebrew_bin   希伯来语,   二进制

hebrew_general_ci  希伯来语,   不区分大小写

hp8    (HP West European)

hp8_bin   西欧 (多语言),   二进制

hp8_english_ci   英语,    不区分大小写

keybcs2   (DOS Kamenicky Czech-Slovak)

keybcs2_bin   捷克斯洛伐克语,   二进制

keybcs2_general_ci  捷克斯洛伐克语,  不区分大小写

koi8r    (KOI8-R Relcom Russian)

koi8r_bin   俄语,    二进制

koi8r_general_ci  俄语,    不区分大小写

koi8u    (KOI8-U Ukrainian)

koi8u_bin   乌克兰语,   二进制

koi8u_general_ci  乌克兰语,   不区分大小写

latin1    (cp1252 West European)

latin1_bin   西欧 (多语言),   二进制

latin1_danish_ci  丹麦语,   不区分大小写

latin1_general_ci  西欧 (多语言),   不区分大小写

latin1_general_cs  西欧 (多语言),   区分大小写

latin1_german1_ci  德语 (字典),   不区分大小写

latin1_german2_ci  德语 (电话本),   不区分大小写

latin1_spanish_ci  西班牙语,   不区分大小写

latin1_swedish_ci  瑞典语,   不区分大小写

整理 描述

latin2    (ISO 8859-2 Central European)

latin2_bin   中欧 (多语言),   二进制

latin2_croatian_ci  克罗地亚语,   不区分大小写

latin2_czech_cs  捷克语,   区分大小写

latin2_general_ci  中欧 (多语言),   不区分大小写

latin2_hungarian_ci  匈牙利语,   不区分大小写

latin5    (ISO 8859-9 Turkish)

latin5_bin   土耳其语,   二进制

latin5_turkish_ci  土耳其语,   不区分大小写

latin7    (ISO 8859-13 Baltic)

latin7_bin   巴拉克语 (多语言),  二进制

latin7_estonian_cs  爱沙尼亚语,   区分大小写

latin7_general_ci  巴拉克语 (多语言),  不区分大小写

latin7_general_cs  巴拉克语 (多语言),  区分大小写

macce    (Mac Central European)

macce_bin   中欧 (多语言),   二进制

macce_general_ci  中欧 (多语言),   不区分大小写

macroman   (Mac West European)

macroman_bin   西欧 (多语言),   二进制

macroman_general_ci  西欧 (多语言),   不区分大小写

sjis    (Shift-JIS Japanese)

sjis_bin   日语,    二进制

sjis_japanese_ci  日语,    不区分大小写

swe7    (7bit Swedish)

swe7_bin   瑞典语,   二进制

swe7_swedish_ci  瑞典语,   不区分大小写

tis620    (TIS620 Thai)

tis620_bin   泰语,    二进制

tis620_thai_ci   泰语,    不区分大小写

ucs2    (UCS-2 Unicode)

ucs2_bin Unicode  (多语言),   二进制

ucs2_czech_ci   捷克语,   不区分大小写

ucs2_danish_ci   丹麦语,   不区分大小写

ucs2_esperanto_ci  未知,    不区分大小写

ucs2_estonian_ci  爱沙尼亚语,   不区分大小写

ucs2_general_ci  Unicode (多语言),  不区分大小写

ucs2_hungarian_ci  匈牙利语,   不区分大小写

ucs2_icelandic_ci  冰岛语,   不区分大小写

ucs2_latvian_ci  拉脱维亚语,   不区分大小写

ucs2_lithuanian_ci  立陶宛语,   不区分大小写

ucs2_persian_ci  波斯语,   不区分大小写

ucs2_polish_ci   波兰语,   不区分大小写

ucs2_roman_ci   西欧,    不区分大小写

ucs2_romanian_ci  罗马尼亚语,   不区分大小写

ucs2_slovak_ci   斯洛伐克语,   不区分大小写

ucs2_slovenian_ci  斯洛文尼亚语,   不区分大小写

ucs2_spanish2_ci  传统西班牙语,   不区分大小写

ucs2_spanish_ci  西班牙语,   不区分大小写

ucs2_swedish_ci  瑞典语,   不区分大小写

ucs2_turkish_ci  土耳其语,   不区分大小写

ucs2_unicode_ci  Unicode (多语言),  不区分大小写

ujis    (EUC-JP Japanese)

ujis_bin   日语,    二进制

ujis_japanese_ci  日语,    不区分大小写

utf8    (UTF-8 Unicode)

utf8_bin   Unicode (多语言),  二进制

utf8_czech_ci   捷克语,   不区分大小写

utf8_danish_ci   丹麦语,   不区分大小写

utf8_esperanto_ci  未知,    不区分大小写

utf8_estonian_ci  爱沙尼亚语,   不区分大小写

utf8_general_ci  Unicode (多语言),  不区分大小写

utf8_hungarian_ci  匈牙利语,   不区分大小写

utf8_icelandic_ci  冰岛语,   不区分大小写

utf8_latvian_ci  拉脱维亚语,   不区分大小写

utf8_lithuanian_ci  立陶宛语,   不区分大小写

utf8_persian_ci  波斯语,   不区分大小写

utf8_polish_ci   波兰语,   不区分大小写

utf8_roman_ci   西欧,    不区分大小写

utf8_romanian_ci  罗马尼亚语,   不区分大小写

utf8_slovak_ci   斯洛伐克语,   不区分大小写

utf8_slovenian_ci  斯洛文尼亚语,   不区分大小写

utf8_spanish2_ci  传统西班牙语,   不区分大小写

utf8_spanish_ci  西班牙语,   不区分大小写

utf8_swedish_ci  瑞典语,   不区分大小写

utf8_turkish_ci  土耳其语,   不区分大小写

utf8_unicode_ci  Unicode (多语言),  不区分大小写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MySQL 中,如果数据库的字符集设置为 UTF-8,但表字段字符集设置为 GBK,会导致以下影响: 1. 在存储数据时会出现乱码,因为 MySQL 会将数据从 UTF-8 编码转换为 GBK 编码,但 GBK 编码无法正确表示 UTF-8 编码的所有字符,所以会出现乱码。 2. 在查询数据时会出现问题,因为 MySQL 会将查询结果从 GBK 编码转换为 UTF-8 编码,但 GBK 编码无法正确表示 UTF-8 编码的所有字符,所以会出现问题。 建议将数据库和表字段字符集都设置为 UTF-8,这样可以避免上述问题。 ### 回答2: 当MySQL中数据库的字符集utf-8,但表字段字符集为gbk时,会出现以下影响: 1. 存储问题:由于utf-8是一种多字节字符集,而gbk是一种双字节字符集,所以当在utf-8数据库中存储gbk字符时,会导致一个gbk字符占用更多的存储空间,可能引起数据浪费。 2. 编码问题:当utf-8数据库中的表字段字符集为gbk时,会导致编码不一致。当从应用程序中插入或读取数据时,可能会出现字符编码乱码或无法正常显示的情况,特别是在处理特殊字符时更容易出现问题。 3. 排序和比较问题:utf-8和gbk字符集具有不同的排序规则和比较方式。如果在不同字符集之间比较和排序数据,可能导致错误的结果。 4. 查询问题:如果在utf-8数据库表中的gbk字段上进行查询,可能会导致查询结果不准确或无法正常检索到数据。 综上所述,当MySQL中数据库字符集utf-8,但表字段字符集为gbk时,可能会导致存储、编码、排序和查询等方面的问题。为避免这些问题,建议一致地设置字符集,即数据库和表字段应该采用相同的字符集,例如utf-8字符集。 ### 回答3: 当MySQL数据库的字符集UTF-8(或UTF-8编码的别名)时,它可以存储包括汉字在内的各种国际字符集,并且支持多种语言的数据存储与查询。而表字段字符集为GBK,则表示该字段中的数据只能使用GBK字符集进行存储和检索。 对于数据库字符集UTF-8但表字段字符集为GBK的情况,会产生以下影响: 1. 数据存储:当使用UTF-8字符集插入数据到字段中时,MySQL会首先将UTF-8字符集转换为GBK字符集,然后再存储到表字段中。这可能导致一些特殊字符无法正确保存或显示。 2. 字符编码转换:如果从数据库中查询数据并将其显示在页面上时,数据库会将存储在GBK字符集中的数据转换为UTF-8字符集进行显示。这种字符编码转换可能会导致数据显示异常或乱码。 3. 查询效率:由于MySQL需要进行字符集转换,从UTF-8到GBK或从GBK到UTF-8的转换会消耗一定的计算资源和时间。在大数据量或复杂查询的情况下,这些转换可能会降低查询效率。 因此,建议在设计数据库时,数据库的字符集和表字段字符集应保持一致,以避免字符集转换引起的问题。如果需要存储和处理多语言数据,推荐使用UTF-8字符集,它能够更好地支持各种语言和字符集

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值