問題:
MySql在命令行(Client)模式下執行查詢時,中文顯示亂碼,執行中文插入時無法插入
解決命令行中文亂碼問題如下:
對my.ini文件作如下修改
[client]
default-character-set=latin1
port=3306
[mysql]
default-character-set=latin1
[mysqld]
default-character-set=utf8
# The TCP/IP Port the MySQL Server will listen on
port=3306
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8
laint1編碼也可以是GBK編碼
修改完成后使用如下命令查看mysql服務器編碼;
mysql> show variables like 'character\_set\_%';?
+--------------------------+--------+
| Variable_name ? ? ? ? ? ?| Value ?|
+--------------------------+--------+
| character_set_client ? ? | latin1 ? |
| character_set_connection | latin1 ? |
| character_set_database ? | utf8 ? |
| character_set_filesystem | binary |
| character_set_results ? ?| latin1 ? |
| character_set_server ? ? | utf8 ? |
| character_set_system ? ? | utf8 ? |
+--------------------------+--------+
命令行亂碼解決后,JDBC驅動讀取MySql數據庫時產生的亂碼可以使用編碼轉換
用(new String(string.getBytes("ISO-8859-1"),"gb2312")將讀取的中文轉換后,顯示正常。
如果將以上設置的latin1編碼設置為utf8時,JDBCdq驅動讀取MySql中文時不需要編碼轉換顯示也正常
MYSQL在命令行終端下中文顯示正常,但在JSP調用顯出亂碼!
?
? 用JSP查詢顯示亂碼,用(new String(string.getBytes("ISO-8859-1"),"gb2312")還是顯亂碼
?
用<%@ page contentType="text/html; charset=GB2312;pageEncoding="gb2312"%>還是顯亂碼
?
?數據庫編碼類型:UTF-8,GBK,GB2312,LATIN1,ISO-8859-1
MYSQL字符編碼的相關設置:
?
默認的字符是LATIN1,如下:
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 | latin1 |
+--------------------------+--------+
?
?
如果在 /etc/mysql/my.cnf里
?
[mysqld]下添加default-character-set=utf8 ?
?
比如:
#
# * Basic Settings
#
user ? ? ? ?= mysql
pid-file ? ?= /var/run/mysqld/mysqld.pid
socket ? ? ? ?= /var/run/mysqld/mysqld.sock
port ? ? ? ?= 3306
basedir ? ? ? ?= /usr
datadir ? ? ? ?= /var/lib/mysql
tmpdir ? ? ? ?= /tmp
language ? ?= /usr/share/mysql/english
#character_set_client=utf8
#character_set_server=utf8
#character_set_connection=utf8
#character_set_database=utf8
#character_set_results=utf8
?
default-character-set=utf8 ?
?
?
重啟MYSQL,發現字符變化了,變化的是 character_set_server跟system
? 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 ? ? | utf8 ? | ?
| character_set_system ? ? | utf8 ? | ?
?
+--------------------------+--------+
?
?
這時候向數據庫插入中文字符,JSP顯的還是亂碼
?
如果在MYSQL命令行中運行命令:set names utf8;
再插入中文字符,OK!現在JSP 中中文顯示正常!!
?
set names utf8;命令相當于下面三條命令
set character_set_client=utf8;
?
set character_set_connection=utf8;
?
set character_set_results=utf8;
?
如圖:
?
?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_set_server:這是設置服務器使用的字符集
character_set_client :這是設置客戶端發送查詢使用的字符集
character_set_connection :這是設置服務器需要將收到的查詢串轉換成的字符集
character_set_results :這是設置服務器要將結果數據轉換到的字符集,轉換后才發送給客戶端
?
?
小總結:1.這樣每次進入MYSQL終端運行set names utf8;可以搞定亂碼,可是感覺比較煩,因為只對當前的會話有效,下次進入MYSQL仍然要運行這個命令。想在MY。CNF里加上
?
?
character_set_client=utf8
#character_set_server=utf8
character_set_connection=utf8
character_set_database=utf8
character_set_results=utf8
?
但是,這樣不行,加了后MYSQL根本啟動不起來,只能設置character_set_server=utf8這個,別的設置不了,如果 有哪個兄弟搞定了,麻煩告訴我一聲!
?
?
#必須在[mysqld]這段
[mysqld]
default-character-set=utf8
jdbc: mysql ://localhost/test
實際上server端字符集不是utf8的話,加了也沒用(jdbc: mysql ://localhost/test&characterEncoding=UTF-8或者GBK)
可能還會報錯;是utf8的話,加不加都行
windows平臺:
mysql -u root -p --default-character-set=gbk
linux平臺:
mysql -u root -p --default-character-set=utf8?? (這個相當于進入MYSQL后運行set names utf8;)
否則進去select中文是亂碼,insert中文也不能正確保存
?
4. <%@ page pageEncoding="UTF-8"%>這句是制定客戶端的瀏覽器以什么字符查看本頁面,
???? 相當于FIREFOX瀏覽器里的“查看”--》“字符編碼”--》“UTF-8”,當然如果制定. <%@ page pageEncoding=“GB2312"%>那么查看本頁面的瀏覽器里的字符編碼變為GB2312
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
