又一次成功解决mysql乱码问题
(mysql,问题,mysql数据库,乱码)
以前在我的博客上发过文章总结我遇到的数据及网页上中文乱码的处理办法[再谈乱码问题,如何解决mysql数据中文乱码问题] [解决jsp,tomcat,mysql下中文乱码问题] ,但是,不幸的是,今天又遇到了,用过以前的办法,没能解决,我相信绝对不是网页的问题.因为,我在mysql里直接添加中文的数据能在网页上正常显示, 可是在网页中操作添加的数据,到mysql数据库里一看,全是?问号.我下断点,跟踪进去看了,程序中最后处理到数据库操作时,还是中文,操作到数据 库后,就是?问号了.
后来找了很多资料,终于把这个问题解决,由于能直接在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字符集编码 详细说明
--------------------------------------------------------------
原文地址:http://www.phpfans.net/bbs/viewthread.php?tid=296&extra=page%3d1
==============================================================
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 (多语言), 不区分大小写
绿色通道:好文要顶关注我收藏该文与我联系