




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 MySQL 中文亂碼 .txt 不要放棄自己! - (媽媽曾經(jīng)這樣對我說,轉(zhuǎn)身出門的一剎那, 我淚流滿面,卻不想讓任何人看見! ) 看到這一句 小編也心有感觸,想起當(dāng)初離家前往 幾千里外的地方的時候,媽媽也說過類似的話,但是身為男兒,必須創(chuàng)出一片天,才能報答 父母的養(yǎng)育之恩! ! 亂碼產(chǎn)生原因 mysql 字符編碼是版本 4.1 引入的 , 支持多國語言 , 而且一些特性已經(jīng)超過了其他的數(shù)據(jù)庫系 統(tǒng)。 我們可以在 MySQL Command Line Client 下輸入如下命令查看 mysql 的字符集 mysql SHOW CHARACTER SET; +- + - +- - - - -
2、 +- + | 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 | | koi8
3、r | 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_japa
4、nese_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 Chi
5、nese | 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_ge
6、neral_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
7、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
8、 | 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 的字符集知識可以參考
9、http:/ 論壇的 http:/ 或者 mysql 官方的 http:/ MySQL 4.1 的字符集支持 (Character Set Support) 有兩個方面:字符集 (Character set) 和 排序方式 (Collation) 。對于字符集的支持細(xì)化到四個層次 : 服務(wù)器 (server) ,數(shù)據(jù)庫 (database) ,數(shù)據(jù)表 (table) 和連接 (connection) 。 查看系統(tǒng)的字符集和排序方式的設(shè)定可以通過下面的兩條命令: mysql SHOW VARIABLES LIKE character_set_%; +- +- + | Variable_name
10、| 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:MySQLMySQL
11、 Server 5.0sharecharsets | +- +- + 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) 上面列
12、出的值就是系統(tǒng)的默認(rèn)值。 latin1 默認(rèn)校對規(guī)則是 latin1_swedish_ci ,默認(rèn)是 latin1 的瑞典語排序方式 . 為什么呢默認(rèn)會是 latin1_swedish_ci 呢 , 追溯一下 mysql 歷史很容易發(fā)現(xiàn) 1979 年,一家瑞典公司 Tcx 欲開發(fā)一個快速的多線程、多用戶數(shù)據(jù)庫系統(tǒng)。 Tcx 公司起初想 利用 mSQL 和他們自己的快速低級例程 (Indexed Sequential Access Method , ISAM)去連接 數(shù)據(jù)庫表,然而,在一些測試以后得出結(jié)論: mSQL 對其需求來說不夠快速和靈活。這就產(chǎn)生 了一個連接器數(shù)據(jù)庫的新 SQL 接口,它
13、使用幾乎和 mSQL 一樣的 API 接口。這個 API 被設(shè)計成 可以使那些由 mSQL 而寫的第三方代碼更容易地移植到 MySQL。 相信如果 mysql 是中國開發(fā)的,那么漢語也是默認(rèn)編碼了 當(dāng)然我們也可以自己需要修改 mysql 的默認(rèn)字符集 在 mysql 配置文檔 my.ini ,找到如下兩句: mysql default-character-set=latin1 和 created and no character set is defined default-character-set=latin1 修改后面的值就可以。 這里不建議改,仍保留默認(rèn)值 也就是說啟動 mysql 時
14、,如果沒指定指定一個默認(rèn)的的字符集, 這個值繼承自配置文件中的; 此時 character_set_server 被設(shè)定為這個默認(rèn)的字符集; 當(dāng)創(chuàng)建一個新的數(shù)據(jù)庫時, 除非明確指定,這個數(shù)據(jù)庫的字符集被缺省設(shè)定為 character_set_server ; 當(dāng)選定了一個 數(shù)據(jù)庫時, character_set_database 被設(shè)定為這個數(shù)據(jù)庫默認(rèn)的字符集; 在這個數(shù)據(jù)庫里創(chuàng)建一張表 時, 表默認(rèn)的字符集被設(shè)定為 character_set_database ,也就是這個數(shù)據(jù)庫默認(rèn)的字符集;當(dāng)在表內(nèi)設(shè)置一欄時,除非明確指定,否則此欄缺省的字符集就是表默認(rèn)的字符集。 這樣問題就隨之而來了,假
15、如一數(shù)據(jù)庫是 gbk 編碼。如果訪問數(shù)據(jù)庫時沒指定其的字符集是 gbk 。 那么這個值將繼承系統(tǒng)的 latin1 ,這樣就做成 mysql 中文亂碼。 亂碼解決方法 要解決亂碼問題,首先必須弄清楚自己數(shù)據(jù)庫用什么編碼。如果沒有指明,將是默認(rèn)的 latin1 。 我們用得最多的應(yīng)該是這 3 種字符集 gb2312 , gbk,utf8 。 那么我們?nèi)绾稳ブ付〝?shù)據(jù)庫的字符集呢?下面也 gbk 為例 【在 MySQL Command Line Client 創(chuàng)建數(shù)據(jù)庫 】 mysql CREATE TABLE mysqlcode ( - id TINYINT( 255 ) UNSIGNED NOT
16、NULL AUTO_INCREMENT PRIMARY KEY , - content VARCHAR( 255 ) NOT NULL - ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci; Query OK, 0 rows affected, 1 warning (0.03 sec) mysql desc mysqlcode; +- +- + -+- +- +- + | Field | Type | Null | Key | Default | Extra | +- +- + -+- +- +- + | id | tinyint
17、(255) unsigned | NO |PRI| | auto_increment | | content | varchar(255) | NO | | | | +- +- + -+- +- +- + 2 rows in set (0.02 sec) 其中后面的 TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci; 就是指定數(shù)據(jù)庫的字符集, COLLATE (校勘 ) ,讓 mysql 同時支持多種編碼的數(shù)據(jù)庫。 當(dāng)然我們也可以通過如下指令修改數(shù)據(jù)庫的字符集 alter database da_name default charac
18、ter set charset. 客戶端以 gbk 格式發(fā)送 ,可以采用下述配置 : SET character_set_client=gbk SET character_set_connection=gbk SET character_set_results=gbk 這個配置就等價于 SET NAMES gbk 。 更多數(shù)據(jù)庫知識請參考 http:/ 現(xiàn)在對剛才創(chuàng)建的數(shù)據(jù)庫操作 mysql use test; Database changed mysql insert into mysqlcode values(null,php 愛好者 ); ERROR 1406 (22001): Data
19、 too long for column content at row 1 沒有指定字符集為 gbk,插入時出錯 mysql set names gbk; Query OK, 0 rows affected (0.02 sec) 指定字符集為 gbk mysql insert into mysqlcode values(null,php 愛好者 ); Query OK, 1 row affected (0.00 sec) 插入成功 mysql select * from mysqlcode; +- +- + | id | content | +- +- + | 1 | php 愛好著 | +-
20、 +- + 1 row in set (0.00 sec) 在沒有指定字符集 gbk 時讀取也會出現(xiàn)亂碼,如下 mysql select * from mysqlcode; +- +- + | id | content | +- +- + | 1 | php? | +- +- + 1 row in set (0.00 sec) 【在 phpmyadmin 創(chuàng)建數(shù)據(jù)庫 , 并指定字符集】 表類型根據(jù)自己需要選,這里選 MyISAM(支持全文檢索整理選擇 gbk_chinese_ci 也就是 gbk 字符集 ); gbk_bin 簡體中文 , 二進(jìn)制。 gbk_chinese_ci 簡體中文 ,
21、不區(qū)分大小寫。 在剛才創(chuàng)建的數(shù)據(jù)庫插入數(shù)據(jù)庫 再瀏覽時發(fā)現(xiàn)是亂碼 為什么呢?是因為數(shù)據(jù)庫為 gbk 字符集,而我們操作時沒有指定為 gbk 回到數(shù)據(jù)庫首頁 以看到 mysql 連接校對默認(rèn)的 latin1_bin 。我們將其改為 gbk_chinese_ci 再插入一條數(shù)據(jù)???,這條已經(jīng)正常了 你數(shù)據(jù)庫用什么編碼,在對數(shù)據(jù)庫操作之前就 set names 你的編碼 HTML 代碼 HEAD 里面,可以用 來告訴瀏覽器網(wǎng)頁采用了什么編碼,目前中文網(wǎng)站開發(fā)中主要用的是 GB2312 和 UTF-8 兩種編碼。 mysql5 中文亂碼解決 MySql5 中文亂碼的解決方法在使用 MYSQL時,插入中
22、文字符, 經(jīng)常會出現(xiàn)亂碼, 中文全被用 ? 代替。出現(xiàn)這種情況的原因,多是字符集不匹配造成的。 在 MYSQL 中,如果使用缺省的字符集,在建庫、建表時,默認(rèn)使用的是 latin1 字符集,為 ISO 8859-1 西歐字符集。插入中文字符時,與之不匹配,就會出現(xiàn)亂碼。 要解決此問題, 就必須手動將數(shù)據(jù)庫 Server 和 Client 的字符編碼改為 gb2312。配置方法如 下: 打開 MYSQL 安裝目錄下的 my.ini 文件,找到如下段落: # CLIENT SECTION # - # # The following options will be read by MySQL cli
23、ent applications. # Note that only client applications shipped by MySQL are guaranteed # to read this section. If you want your own MySQL client program to # honor these values, you need to specify it as an option during the # MySQL client library initialization. # client port=3306 mysql default-cha
24、racter-set=latin1 SERVER SECTION - The following options will be read by the MySQL Server. Make sure that you have installed the server correctly (see above) so it reads this file. # mysqld The TCP/IP Port the MySQL Server will listen on port=3306 #Path to installation directory. All paths are usual
25、ly resolved relative to this. basedir=D:/MySQL/MySQL Server 5.0/ #Path to the database root datadir=D:/MySQL/MySQL Server 5.0/Data/ 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=latin1 將其中的 default-character-se
26、t=latin1 改為 default-character-set=gb2312, 然后重啟 MYSQL(以前建立的數(shù)據(jù)庫要重建 ), 運(yùn)行 MySQL Command Line Client : 輸入 show variables like character_set_%; 可以查看數(shù)據(jù)庫的字符編碼如下: mysql show variables like character_set_%; +- +- + | Variable_name | Value | +- +- + | character_set_client | gb2312 | | character_set_connection
27、 | gb2312 | | character_set_database | gb2312 | | character_set_filesystem | binary | | character_set_results | gb2312 | | character_set_server | gb2312 | | character_set_system | utf8 | | character_sets_dir | D:MySQLMySQL Server 5.0sharecharsets| +- +- + 然 后 , 在 程 序 中 將 連 接 數(shù) 據(jù) 庫 的URL 改 為 jdbc:mysq
28、l:/localhost:3306/databasename?useUnicode=true&characterEncoding=g b2312 就可以了! 當(dāng)然要支持國際化最好把以上所有 gb2312 換成 utf8 (注意不是 utf-8 在 程 序 中 將 連 接 數(shù) 據(jù) 庫 的 ,除了 URL 改 為 jdbc:mysql:/localhost:3306/databasename?useUnicode=true&characterEncoding=u tf-8 ) MySQL 中文亂碼解決方案集錦 在使用 MySQL 時,插入中文字符,經(jīng)常會出現(xiàn)亂碼,中
29、文全被用 ?代替。 出現(xiàn)這種情況的原因,多是字符集不匹配造成的。 在 MySQL 中,如果使用缺省的字符集,在建庫、建表時,默認(rèn)使用的是 latin1 字符集,為 ISO 8859-1 西歐字符集。 插入中文字符時,與之不匹配,就會出現(xiàn)亂碼。 本人使用的是 MySQL5.0 版,并用 C#操作 MYSQL 數(shù)據(jù)庫,當(dāng)插入中文字符時,發(fā)現(xiàn)顯示的是亂碼。 初步估計是字符集沒有配對。查找后,發(fā)現(xiàn) MSYQL 默認(rèn)使用的是 latin1 ,因此將數(shù)據(jù)庫的配置文件中的字符設(shè)置改為 utf8 ,并在 C#中將中文字符,轉(zhuǎn)為 utf8 ,插入后,仍為亂碼。MySQL 也支持 gb2312,又將 MySQL 的字符設(shè)置改為 gb2312, C#中使用 Default ,重起 MySQL 后,操作仍然無效。 后想起,雖然將 MySQL 的字符集設(shè)置為 gb231
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中級財務(wù)會計知到課后答案智慧樹章節(jié)測試答案2025年春上海財經(jīng)大學(xué)浙江學(xué)院
- 湖北生態(tài)工程職業(yè)技術(shù)學(xué)院《數(shù)學(xué)物理方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 大連商務(wù)職業(yè)學(xué)院《計算機(jī)輔助設(shè)計基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 公路養(yǎng)護(hù)安全現(xiàn)場檢查計劃
- 公共交通智能監(jiān)控管理制度
- 姜餅屋知識內(nèi)容調(diào)查問卷
- 浙江省慈溪市2024-2025學(xué)年高三上學(xué)期期末測試數(shù)學(xué)試卷(解析版)
- 高中數(shù)學(xué)分層練習(xí)(壓軸題)05:解析幾何(30題)【含解析】
- 回填溝渠的施工方案
- 2025年碩師計劃筆試試題及答案
- 阿那亞-社群營銷課件
- 糖尿病性眼肌麻痹的護(hù)理查房
- 《知識產(chǎn)權(quán)執(zhí)法》課件
- 《沃爾瑪企業(yè)物流成本控制現(xiàn)狀及完善對策研究》22000字
- 工程項目成本核算表格
- 成人重癥患者鎮(zhèn)痛管理(專家共識)
- 《Unit-2-Cute-animals課件》小學(xué)英語牛津上海版四年級下冊14875
- 環(huán)境溫度、相對濕度、露點(diǎn)對照表
- 全過程工程咨詢服務(wù)方案
- 澳大利亞11天自由行行程單英文版
- 廣西京星鐵路罐車清洗保養(yǎng)站建設(shè)項目環(huán)境影響報告表
評論
0/150
提交評論