Heim  >  Artikel  >  Datenbank  >  JSP中文乱码问题 页面经过过滤器后得到的是中文,但插入到MYSQL_MySQL

JSP中文乱码问题 页面经过过滤器后得到的是中文,但插入到MYSQL_MySQL

WBOY
WBOYOriginal
2016-06-01 13:51:31805Durchsuche

最近在登陆公司服务器上的数据库时,在命令行里执行查询语句时候得到的结果只要是中文,就全部是乱码,很让人头疼呀,<br />查了些资料总结一下.作为自己以后的参考.<br /><br />MySQL的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。
<br />对于字符集的支持细化到四个层次:<br />服务器(server),数据库(database),数据表(table)和连接(connection)。
<br />1.MySQL默认字符集:MySQL对于字符集的指定可以细化到一个数据库,一张表,一列。<br />传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置.<br /><br />(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;<br />(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;<br />(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,<br />  此时 character_set_server 被设定为这个默认的字符集;<br />(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;<br />(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;<br />(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;<br />(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;如果什么地方都不修改,<br />  那么所有的数据库的所有表的所有栏位的都用 latin1 存储,<br /><br />不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把  default_character_set 设置为 UTF-8,<br />这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。<br /><br />2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:<br /><br />mysql> SHOW VARIABLES LIKE 'character%';<br />+--------------------------+---------------------------------+<br />| Variable_name            | Value                           |<br />+--------------------------+---------------------------------+<br />| character_set_client     | latin1                          |<br />| character_set_connection | latin1                          |<br />| character_set_database   | latin1                          |<br />| character_set_filesystem | binary                          |<br />| character_set_results    | latin1                          |<br />| character_set_server     | latin1                          |<br />| character_set_system     | utf8                            |<br />| character_sets_dir       | D:"mysql-5.0.37"share"charsets" |<br />+--------------------------+---------------------------------+<br /><br />mysql> SHOW VARIABLES LIKE 'collation_%';<br />+----------------------+-----------------+<br />| Variable_name        | Value           |<br />+----------------------+-----------------+<br />| collation_connection | utf8_general_ci |<br />| collation_database   | utf8_general_ci |<br />| collation_server     | utf8_general_ci |<br />+----------------------+-----------------+<br /><br />3. 修改默认字符集<br /><br />  (1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如    default-character-set = utf8      character_set_server =  utf8   修改完后,重启mysql的服务,service mysql restart   使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成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       | D:"mysql-5.0.37"share"charsets" |+--------------------------+---------------------------------+   (2) 还有一种修改字符集的方法,就是使用mysql的命令     mysql> SET character_set_client = utf8 ;     mysql> SET character_set_connection = utf8 ;     mysql> SET character_set_database = utf8 ;     mysql> SET character_set_results = utf8 ;     mysql> SET character_set_server = utf8 ;     mysql> SET collation_connection = utf8 ;     mysql> SET collation_database = utf8 ;     mysql> SET collation_server = utf8 ;一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。<br />问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:SET NAMES 'utf8';它相当于下面的三句指令:SET character_set_client = utf8;SET character_set_results = utf8;SET character_set_connection = utf8;不知道什么原因,我在自己机器上把上述三个字符集都设置成utf8后,查询中文结果还是乱码,<br />只有把character_set_results设置成GBK之后才能从命令行正常显示中文.
<pre class="reply-text mb10">最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值, 如    default-character-set = utf8       character_set_server = utf8    修改完后,重启mysql的服务,service mysql restart 或者SET character_set_client = utf8 ; SET character_set_connection = utf8 ; SET character_set_database = utf8 ; SET character_set_results = utf8 ; SET character_set_server = utf8 ; SET collation_connection = utf8 ; SET collation_database = utf8 ; SET collation_server = utf8 ; 如果你用是SQLYOG可能你放入数据库后看到表中是乱码.但取出还是可以显示成中文 .用Nacivats要好点.可以直接设置数据库的字符集.如果服务器的是tomcat.最好也把tomcat设置下.在server.xml中设置如下:<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />  enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"<br />  connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/> 注意:URIEncoding="UTF-8"是自己加上去的.重启就应该没有什么问题了吧.. 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn