showvariableslike'character%';2.+--------------------------+--------------------------+3.|Variable_name|Value|4.+-" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

sql點滴40—mysql亂碼問題總結

系統 2108 0
原文: sql點滴40—mysql亂碼問題總結

本文將為大家講解如何處理Java連接過程中的MySQL中文亂碼問題。一般MySQL中文亂碼問題都是與字符集有關,這里作者的經歷也大致差不多。

MySQL默認編碼是latin1
1. mysql> show variables like 'character%';
2. +--------------------------+--------------------------+
3. | Variable_name | Value |
4. +--------------------------+--------------------------+
5. | character_set_client | latin1 |
6. | character_set_connection | latin1 |
7. | character_set_database | latin1 |
8. | character_set_filesystem | binary |
9. | character_set_results | latin1 |
10. | character_set_server | latin1 |
11. | character_set_system | utf8 |
12. | character_sets_dir | D:\MySQL\share\charsets\ |
13. +--------------------------+--------------------------+
14. 創建數據表并插入數據
15. mysql> use test;
16. mysql> create table messages (
17. -> id int(4) unsigned auto_increment primary key,
18. -> message varchar(50) not null
19. -> ) engine=myisam default charset=utf8;
20. mysql> insert into messages (message) values ("測試MySQL中文顯示");
21. mysql> select * from messages;
22. +----+-------------------+
23. | id | message |
24. +----+-------------------+
25. | 1 | 測試MySQL中文顯示 |
26. +----+-------------------+
27. 編寫程序(Java)
28. import java.sql.Connection;
29. import java.sql.DriverManager;
30. import java.sql.ResultSet;
31. import java.sql.Statement;
32. public class JDBCTest {
33. public static void main(String[] args) {
34. String driver = "com.mysql.jdbc.Driver";
35. String url = "jdbc:mysql://localhost:3306/test";
36. String user = "root";
37. String password = "root";
38. try {
39. Class.forName(driver);
40. Connection conn = DriverManager.getConnection(url, user, password);
41. Statement stmt = conn.createStatement();
42. stmt.executeUpdate("insert into messages (message) values ('測試MySQL編碼')");
43. ResultSet rs = stmt.executeQuery("select * from messages");
44. while (rs.next()) {
45. int id = rs.getInt("id");
46. String message = rs.getString("message");
47. System.out.println(id + " " + message);
48. }
49. rs.close();
50. stmt.close();
51. conn.close();
52. } catch (Exception e) {
53. e.printStackTrace();
54. }
55. }
56. }
57. 程序輸出
58. 1 ????MySQL????????
59. 2 ??MySQL??

我們看到,盡管使用數據庫時我們能夠正常的添加和顯示中文,但是在使用程序連接數據庫時并不能夠正常顯示中文,為此我們需要修改MySQL的默認編碼,編輯my.ini(MySQL配置文件)文件對編碼進行修改

設置MySQL的默認字符集為utf8,找到客戶端配置[client]在下面添加。

default-character-set=utf8

找到服務器配置[mysqld]在下面添加

default-character-set=utf8

設定MySQL數據庫以utf8編碼運行,連接MySQL數據庫時使用utf8編碼

停止和重新啟動MySQL

net stop mysql

net start mysql

//實際中,最新mySQL以上兩句已經失效,在命令行中先exit 然后重新登錄可以實現這個目的

重新連接數據庫,查看編碼,數據表內容

???????? 1. mysql> show variables like 'character%';?
???????? 2. +--------------------------+--------------------------+?
???????? 3. | Variable_name??????????? | Value??????????????????? |?
???????? 4. +--------------------------+--------------------------+?
???????? 5. | character_set_client???? | utf8???????????????????? |?
???????? 6. | character_set_connection | utf8???????????????????? |?
???????? 7. | character_set_database?? | utf8???????????????????? |?
???????? 8. | character_set_filesystem | binary?????????????????? |?
???????? 9. | character_set_results??? | utf8???????????????????? |?
??????? 10. | character_set_server???? | utf8???????????????????? |?
??????? 11. | character_set_system???? | utf8???????????????????? |????//該行未更改,建議使用替換,這樣能改的全面
??????? 12. | character_sets_dir?????? | D:\MySQL\share\charsets\ |?
??????? 13. +--------------------------+--------------------------+?
??????? 14. mysql> use test;?
??????? 15. mysql> select * from messages;?
??????? 16. +----+-------------------------------+?
??????? 17. | id | message?????????????????????? |?
??????? 18. +----+-------------------------------+?
??????? 19. |? 1 | 虜芒脢脭MySQL脰脨脦脛脧脭脢戮???????????? |?
??????? 20. |? 2 | ??MySQL?????????????????????? |?
??????? 21. +----+-------------------------------+?
??????? 22. 這里顯示依然是亂碼主要是因為之前使用的編碼不同造成的,重新運行之前寫的程序:java JDBCTest?
??????? 23. 1 ????MySQL?????????
??????? 24. 2 ??MySQL???
??????? 25. 3 測試MySQL編碼?
??????? 26. 從第三條記錄我們可以看到現在程序連接數據庫時可以正常的添加和顯示中文了?//如果從MySQL command line中仍然查詢不到數據,顯示數據集為空,繼續完成第三步使得系統的編碼和mySQL的編碼一致就可以查詢出來了……&
??????? 27. mysql> select * from messages;?
??????? 28. +----+-------------------------------+?
??????? 29. | id | message?????????????????????? |?
??????? 30. +----+-------------------------------+?
??????? 31. |? 1 | 虜芒脢脭MySQL脰脨脦脛脧脭脢戮???????????? |?
??????? 32. |? 2 | ??MySQL?????????????????????? |?
??????? 33. |? 3 | 嫻嬭瘯MySQL緙栫爜???????????????? |?
??????? 34. +----+-------------------------------+

????? 看回數據庫的顯示,我們會很奇怪的發現為什么顯示的都是亂碼,這主要是和windows下命令行的編碼有關,在命令行上(命令提示符左上角圖標處右鍵屬 性)查看屬性->選項的當前代碼頁:936?? (ANSI/OEM - 簡體中文 GBK)(本人機子上是這樣顯示的)
????? 也就是說命令行上使用的是GBK編碼,而我們是在程序連接時使用utf8進行添加的,所以會出現有亂碼,現在我們將客戶端的編碼改成gb2312或gbk試一下

???????? 1. mysql> show variables like 'character%';?
???????? 2. +--------------------------+--------------------------+?
???????? 3. | Variable_name??????????? | Value??????????????????? |?
???????? 4. +--------------------------+--------------------------+?
???????? 5. | character_set_client???? | gb2312?????????????????? |?
???????? 6. | character_set_connection | gb2312?????????????????? |?
???????? 7. | character_set_database?? | utf8???????????????????? |?
???????? 8. | character_set_filesystem | binary?????????????????? |?
???????? 9. | character_set_results??? | gb2312?????????????????? |?
??????? 10. | character_set_server???? | utf8???????????????????? |?//最后你會發現這個還是沒有更改,見下文
??????? 11. | character_set_system???? | utf8???????????????????? |?
??????? 12. | character_sets_dir?????? | D:\MySQL\share\charsets\ |?
??????? 13. +--------------------------+--------------------------+?
??????? 14. mysql> use test;?
??????? 15. mysql> select * from messages;?
??????? 16. +----+-------------------+?
??????? 17. | id | message?????????? |?
??????? 18. +----+-------------------+?
??????? 19. |? 1 | ????MySQL???????? |?
??????? 20. |? 2 | ??MySQL?????????? |?
??????? 21. |? 3 | 測試MySQL編碼???? |?
??????? 22. +----+-------------------+

????? 補充:更改character_set_server,在安裝目錄的bin文件夾下使用MySQLInstanceConfig.exe配置,在很多步驟中的一步(選擇編碼)選擇第二項(使用UTF-8)或者第三項(自己設定)……更改完畢……

現在可以看到中文正常顯示了(主要是因為utf8也支持中文),所以當我們使用命令行工具連接數據庫的時候最好將客戶端的編碼改一下,如果使用GUI的話就不必了,同時修改客戶端的編碼之后程序依然能夠正常顯示(以上兩點已經測試)

????? 所以如果在程序中要顯示中文的話我們可以選用utf8,gb2312,gbk這三種編碼,但是如果想在命令行添加中文數據或者查看的話就需要將客戶端的編碼設置為gb2312或gbk了,還是那句,CMD的編碼有關

?

迷茫啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

1.查詢編碼

        show variables 
        
          like
        
        
          '
        
        
          character%
        
        
          '
        
        ;
      

2.設置數據庫字符集

        
          alter
        
        
          database
        
         moviesite 
        
          character
        
        
          set
        
         utf8
      

3.設置表的字符集

        
          alter
        
        
          table
        
         movie 
        
          convert
        
        
          to
        
        
          character
        
        
          set
        
         utf8
      

4.不知道

        
          set
        
         character_set_results
        
          =
        
        utf8
      

5.不知道

        
          set
        
        
          character
        
        
          set
        
         utf8
      

6.不知道

        
          set
        
         names 
        
          '
        
        
          utf8
        
        
          '
        
      

?

有時候這些都不管用,要設置成gbk或gb2312,好像沒什么規律,我擦!。

? php網頁出現亂碼一般是在建立數據庫時用的編碼和php網頁的編碼不同造成的,?

用phpmyadmin建立的數據庫如果你不指定編碼他默認是latin1_swedish_ci 編碼,既瑞典語不區分大小寫,而我們中國做的網頁不是GBK就是GB2312編碼,這樣不出現亂碼才怪.?

1,建立數據庫時指定編碼.?

在此再嘮叨一下常用的編碼,免的新手又迷茫:?
如果你做的是簡體中文網頁,那么你在建立數據庫時用GB2312編碼,gb2312_chinese_ci.?
如果你做的是繁體中文網頁,那么你建立數據庫時要用gib5編碼, big5_chinese_ci?
如果你做的網頁有簡體也有繁體中文,那么推薦你用GBK編碼,gbk_chinese_ci . GBK包含的字碼比GB2312要多,當然繁體也在其中.?
如果你做的是多國語言網頁,那么推薦你用UTF-8編碼 . mysql中有二種utf8編碼可供選擇 : utf8_unicode_ci與utf8_general_ci 筆者一般用utf8_general_ci ,關于這二種編碼的區別,請參考本站的另一篇文章: Mysql中校對集utf8_unicode_ci與utf8_general_ci的區別?
我們用UTF-8編碼為例建立數據庫如圖:?

sql點滴40—mysql亂碼問題總結 ?

?

2,用php連接數據庫時用mysq_query 設定一下編碼?
語法: mysql_query("SET NAMES 'utf8'");?
例如:?

復制代碼代碼如下:
$conn=mysql_connect('127.0.0.1','root','123456');?
mysql_query("set names 'utf8'",$conn); //解決亂碼?
mysql_select_db('test1',$conn);?

一般情況下只要你做好了這二步,你的程序是不會出現亂碼的?
二般情況: ?
二般情況一般出現的不多,多出現在做的程序語言比較多,比如有時做utf8的,有時做gb2312的,有時又要做big5的網頁,用IDE建立的.php文件編碼和程序要顯示的編碼不同而引起的.?
比如,我上次做了個gb2312的簡體中文網頁,現在老板又有吩咐要做個gbi5網頁,但我的ide用的卻是gb2312的編碼?
就拿我常用的IDE Dreamweaver來說吧?

sql點滴40—mysql亂碼問題總結 ?

ide新建的網頁是gb2312,而我卻把建好的網頁改成big5的了,這樣怎么會不出現亂碼呢,解決的方法很簡單,重新另存為一下,指定一下編碼就OK了,?
如果還搞不定,那么在網頁頭部加一行http頭信息?
header("Content-Type:text/html;charset=utf-8");?
注意:在發送header頭信息時header前面不可以有任何輸出,包括空格在內.?
好了寫了這么多,快看看你的程序屬于哪個情況引起的亂碼吧.

sql點滴40—mysql亂碼問題總結


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美乱妇高清无乱码视频在线 | 亚洲免费人成在线视频观看 | 国产高清一区二区三区免费视频 | 天天看片日日夜夜 | 亚洲精品一区二区综合 | 亚洲日本aⅴ片在线观看香蕉 | swag国产精品一区二区 | 国产成人乱码一区二区三区在线 | 免费毛片a线观看 | 久久久久久国产精品三级 | 一级毛片免费视频日本 | 国产极品嫩模在线观看91精品 | 中文字幕五月天 | 香蕉视频网站在线播放 | 国产在线精品福利91香蕉 | 日韩亚洲欧洲在线rrrr片 | 欧美性理论片在线观看片免费 | aaaa级片 | 一级中国毛片 | 久草在线视频免费资源观看 | 天海翼一区 在线播放 | 国产一级特黄aaaa大片野外 | 亚洲国产精品成人午夜在线观看 | 精品久久在线 | 日韩国产片| 91精品推荐 | 久久久国产精品福利免费 | 国产一级aaa全黄毛片 | 99ri精品视频在线观看播放 | 国产精品看片 | 二级毛片免费观看全程 | 国产精品毛片天天看片 | 999热视频 | 国产香蕉视频在线 | 亚洲qingse中文在线 | 国产欧美一区二区三区视频 | 国产亚洲精品一区二区三区 | 特级毛片免费视频 | 久久99热这里只有精品免费看 | 国产精品一区二区三区四区五区 | 亚洲欧美中文字幕在线网站 |