国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

常見的導(dǎo)致mysql中文亂碼問題

2024-07-24 12:36:55
字體:
供稿:網(wǎng)友

在mysql應(yīng)用中導(dǎo)致mysql中文亂碼的問題不意外就是編碼問題了,但在編碼問題上有服務(wù)器編碼還是latin1或都數(shù)據(jù)庫編碼與程序頁面編碼未處理好,只要做到這兩點(diǎn)mysql中文問題就可以解決了.

以前寫過一篇有關(guān)如何處理mysql中文亂碼的問題,結(jié)果發(fā)現(xiàn)還是有必要再寫這一篇.

原因是很多時(shí)候,為了安全,不允許mysql管理工具連接線上的正式環(huán)境,這樣的情況下,就不能依靠mysql管理工具來轉(zhuǎn)換編碼來解決中文亂碼的問題.

這樣的情況下只能通過putty或者secureCRT遠(yuǎn)程連接mysql server,然后通過mysql命令界面來對mysql數(shù)據(jù)庫導(dǎo)出,再做其他的編碼轉(zhuǎn)換操作,我現(xiàn)在面臨的環(huán)境就是這樣.

現(xiàn)在,描述一下我的數(shù)據(jù)情況,我需要導(dǎo)出中文亂碼的數(shù)據(jù)表account.user,代碼如下:

  1. mysql> show create database account; 
  2. +———-+——————————————————————————————+ 
  3. Database | Create Database | 
  4. +———-+——————————————————————————————+ 
  5. | account | CREATE DATABASE `account` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ | 
  6. +———-+——————————————————————————————+ 
  7. 1 row in set (0.00 sec) 
  8. mysql> show create table user
  9. +———————+———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–+ 
  10. Table | Create Table | 
  11. +———————+———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–+ 
  12. | user_agreement_info | CREATE TABLE `user` ( 
  13. `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  14. `uid` bigint(21) unsigned NOT NULL
  15. `realname` char(32) NOT NULL
  16. `id_type` smallint(11) unsigned NOT NULL
  17. `id_num` char(32) DEFAULT NULL
  18. `create_time` int(10) unsigned DEFAULT NULL
  19. PRIMARY KEY (`id`), 
  20. KEY `uid` (`uid`) 
  21. ) ENGINE=MyISAM AUTO_INCREMENT=129287 DEFAULT CHARSET=utf8 | 
  22. +———————+———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–+ 
  23. 1 row in set (0.02 sec) 
  24. #查詢數(shù)據(jù)亂碼,看下面: 
  25. mysql> select * from user limit 10; 
  26. +—-+————+—————————+———+——————–+————-+ 
  27. | id | uid | realname | id_type | id_num | create_time | 
  28. +—-+————+—————————+———+——————–+————-+ 
  29. | 23 | 1000001229 | è€?陈 | 1 | 410101234567891234 | 1272619237 | 
  30. | 2 | 1000001207 | ç?‹æ–‡é‰´ | 1 | 320211198511261933 | 1272546559 | 
  31. | 3 | 1000001208 | è’‹å®¶é”‹ | 1 | 513023198808294915 | 1272547009 | 
  32. | 4 | 1000001209 | zhaojing | 1 | 320822198704286120 | 1272550654 | 
  33. | 5 | 1000001210 | é˜®å°?æ­¦ | 1 | 31020619840214283X | 1272562857 | 
  34. | 6 | 1000001211 | é»‘夜精ç?µ | 1 | 412723798204103835 | 1272588671 | 
  35. | 7 | 1000001212 | è°¢å‹‡ | 1 | 330722198408168210 | 1272591799 | 
  36. | 8 | 1000001213 | é‚µæ˜?芳 | 3 | 0621316 | 1272592840 | 
  37. | 9 | 1000001215 | ç?‹ç»´çºª | 1 | 330382198611030393 | 1272592959 | 
  38. | 10 | 1000001216 | è°ˆå®? | 1 | 430721198309272802 | 1272595142 | 
  39. +—-+————+—————————+———+——————–+————-+ 
  40. 10 rows in set (0.00 sec) 
  41. #數(shù)據(jù)庫編碼設(shè)置情況:Vevb.com 
  42. mysql> show variables like ‘%char%’; 
  43. +————————–+—————————————-+ 
  44. | Variable_name | Value | 
  45. +————————–+—————————————-+ 
  46. | character_set_client | utf8 | 
  47. | character_set_connection | utf8 | 
  48. | character_set_database | utf8 | 
  49. | character_set_filesystem | binary | 
  50. | character_set_results | utf8 | 
  51. | character_set_server | utf8 | 
  52. | character_set_system | utf8 | 
  53. | character_sets_dir | /usr/local/mysql/share/mysql/charsets/ | 
  54. +————————–+—————————————-+ 
  55. rows in set (0.02 sec) 

這是什么問題呢?首先我們來看下數(shù)據(jù)是什么編碼,代碼如下:

  1. mysql> set names latin1; 
  2. Query OK, 0 rows affected (0.02 sec) 
  3. mysql> select * from user_agreement_info limit 10; 
  4. +—-+————+————–+———+——————–+————-+ 
  5. | id | uid | realname | id_type | id_num | create_time | 
  6. +—-+————+————–+———+——————–+————-+ 
  7. | 23 | 1000001229 | 陳 | 1 | 410101234567891234 | 1272619237 | 
  8. | 2 | 1000001207 | 王嘉文 | 1 | 320211198511261933 | 1272546559 | 
  9. | 3 | 1000001208 | 網(wǎng)家鋒 | 1 | 513023198808294915 | 1272547009 | 
  10. | 4 | 1000001209 | zaojing | 1 | 320822198704286120 | 1272550654 | 
  11. | 5 | 1000001210 | 小林 | 1 | 31020619840214283X | 1272562857 | 
  12. | 6 | 1000001211 | 黑夜精靈 | 1 | 412723798204103835 | 1272588671 | 
  13. | 7 | 1000001212 | 鳳舞 | 1 | 330722198408168210 | 1272591799 | 
  14. | 8 | 1000001213 | 邵明芳 | 3 | 0621316 | 1272592840 | 
  15. | 9 | 1000001215 | 王維紀(jì) | 1 | 330382198611030393 | 1272592959 | 
  16. | 10 | 1000001216 | 談宏 | 1 | 430721198309272802 | 1272595142 | 
  17. +—-+————+————–+———+——————–+————-+ 
  18. 10 rows in set (0.01 sec) 

現(xiàn)在可以確定了,這個(gè)表里的數(shù)據(jù)時(shí)latin1編碼的,我們知道如果要mysql中,中文正常顯示,必須要保持編碼一致,我們看到在數(shù)據(jù)庫里執(zhí)行set names latin1之后,中文就能正常顯示,那么我們就按照這樣的方式導(dǎo)出數(shù)據(jù),代碼如下:

[root@sh-db1 tmp]# /usr/local/mysql/bin/mysqldump -uroot –opt –default-character-set=latin1  -p654321  account user >/tmp/user.sql

注意這里的導(dǎo)出參數(shù)–default-character-set=latin1,也就是相當(dāng)于我們在數(shù)據(jù)導(dǎo)出之前在數(shù)據(jù)庫里執(zhí)行set names latin1;

這樣數(shù)據(jù)就以sql腳本的方式存在于server上,使用vim查看文件/tmp/user.sql時(shí)發(fā)現(xiàn)還是亂碼,這是為什么呢?下面就是原因,代碼如下:

  1. [root@sh-db1 tmp]# locale 
  2. LANG=en_US.UTF-8 
  3. LC_CTYPE=”en_US.UTF-8″ 
  4. LC_NUMERIC=”en_US.UTF-8″ 
  5. LC_TIME=”en_US.UTF-8″ 
  6. LC_COLLATE=”en_US.UTF-8″ 
  7. LC_MONETARY=”en_US.UTF-8″ 
  8. LC_MESSAGES=”en_US.UTF-8″ 
  9. LC_PAPER=”en_US.UTF-8″ 
  10. LC_NAME=”en_US.UTF-8″ 
  11. LC_ADDRESS=”en_US.UTF-8″ 
  12. LC_TELEPHONE=”en_US.UTF-8″ 
  13. LC_MEASUREMENT=”en_US.UTF-8″ 
  14. LC_IDENTIFICATION=”en_US.UTF-8″ 
  15. LC_ALL= 

還有跟你的連接工具的編碼有關(guān)系,去查看一下你的putty或者secureCRT連接使用的是什么編碼,這些不同的編碼就是造成你使用vim查看中文顯示亂碼的原因.

沒有關(guān)系,我們使用sz命令把/tmp/user.sql下載到本地,也就是你的windows主機(jī)上.

然后使用emedtor或者uedtor,notepad++,vim都可以,打開,發(fā)現(xiàn)中文已經(jīng)可以正常顯示,如果不正常顯示,那就往前看看是不是哪里做錯(cuò)了,修改user.sql里面的內(nèi)容,set names latin1;修改為set names utf8;然后另存為utf8的編碼形式.

再使用rz上傳到mysql server上,再次使用vim打開,發(fā)現(xiàn)中文正常顯示,代碼如下:

[root@sh-db1 tmp]# /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql3306.sock -p654321 account < user.sql

登錄mysql查看,中文顯示正常.

最后總結(jié)了幾點(diǎn)中文亂碼問題:

1.server本身設(shè)定問題,例如還停留在latin1

2.table的語系設(shè)定問題(包含character與collation)

3.客戶端程式(例如php)的連線語系設(shè)定問題

強(qiáng)烈建議使用utf8,utf8可以兼容世界上所有字符.

4.在網(wǎng)頁代碼中加上一個(gè)"set names utf8"或者"set names gbk"的指令,告訴MySQL連線內(nèi)容都要使用 utf8或者gbk.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金门县| 六盘水市| 山东省| 平江县| 牡丹江市| 德阳市| 绩溪县| 盘山县| 永宁县| 清水河县| 文成县| 丰城市| 鸡西市| 绵阳市| 青阳县| 黄石市| 上栗县| 苍南县| 罗平县| 平和县| 晴隆县| 密山市| 东山县| 那坡县| 成安县| 望奎县| 庆云县| 罗山县| 广东省| 政和县| 朝阳县| 绥芬河市| 进贤县| 象山县| 锡林郭勒盟| 皮山县| 东辽县| 康定县| 凤山市| 平定县| 南投县|