999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MySQL數據庫系統中文亂碼問題及解決方案

2021-09-23 06:08:16李曼
電子技術與軟件工程 2021年12期
關鍵詞:規則數據庫

李曼

(商丘職業技術學院 河南省商丘市 476100)

1 引言

MySQL數據庫技術是一門非常重要的計算機專業基礎課程,在WEB應用方面,同時,由于MySQL的跨平臺性,它可以在Linux、Windows、Netware等20多個平臺上運行。MySQL是一種開放源代碼的關系型數據庫管理系統(RDBMS),它體積小、速度快、總體成本低,所以MySQL是近年來很多中小型網站開發首要選擇的網站數據庫軟件。MySQL數據庫系統使用結構化查詢語言(SQL)進行數據庫管理。我們通過系統分析把現實世界事物及其聯系信息化轉換為信息世界里的概念模型,再經過系統數據庫設計將我們得到的概念模型轉化為計算機世界的數據模型,這一過程我們就需要使用MySQL數據庫系統來實現,我們知道,計算機只能識別二進制代碼,為了使計算機不僅能做科學計算,也能處理文字信息,人們想出了給每個文字符號編碼以便于計算機識別處理的辦法,這就是計算機字符集產生的原因。這一套文字符號及其編碼、比較規則的集合[1]會直接影響數據庫中數據信息的顯示,可以以我們希望看的的樣式顯示,當然也會以我們不希望看到的一種方式——亂碼來顯示給我們,接下來我們就來探討一下字符編碼為什么會影響字符的顯示以及亂碼出現的原因及其解決方式。

2 字符編碼方式及應用

2.1 常用的字符編碼方式

字符編碼(英文Character encoding)是為了方便文本在計算機中存儲并通過通信網絡進行傳遞,把指定集合中某一對象字符集中的字符進行編碼。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其它符號編號,并用7比特的二進制來表示這個整數。通常會額外使用一個擴充的比特,以便于以1個字節的方式存儲[2]。

在數據庫中常見的編碼方式有以下幾種:

(1)Latin編碼方式,這是一種標準字符集(standard character set),支持英文和許多西歐語言。

(2)utf-8編碼方式,這是一種支持大部分語言的字符集,為了提高Unicode的編碼效率,于是就出現了UTF-8編碼。UTF-8可以根據不同的符號自動選擇編碼的長短。比如英文字母可以只用1個字節就夠了。

(3)GB2312碼是ANSI編碼的一種,為了滿足國內在計算機中使用漢字的需要由國家標準總局發布的一系列字符集國家標準編碼,GB2312是一個簡體的中文字符集。

(4)GBK即漢字內碼擴展規范,K為擴展的漢語拼音中“擴”字的聲母。關于字符集、語言等信息文件都存放在MySQL軟件目錄結構下的share文件中[3]。

2.2 字符集編碼及校驗規則

通過學習MySQL數據庫我們知道,show的相關語句內容很多, 它的功能就是可以查看很多內容,服務器可以支持多種字符集,比如show character set;這條語句可以列出可用的字符集,show collation可以列出一個字符集的校對規則,如果想要查看gb2312字符集的校驗規則,我們就可以使用show collation like 'gb2312%';這里要明確的一點是:字符集并不完全等同于整理規則, 我們知道同一個字符集可能有多個排序規則,比如latin1 -> latin1_Swedish_Ci, Latin_Spanish_Ci,……因為有時我們在代碼里沒有指定collation,這時就需要指定一個 default collation,Ci表示 case insensitive 大小寫不敏感,cs: case sensitive 大小寫敏感,并不是所有的整理規則都要使用ci[3]。

如果想要查看各個字段的整理規則,可以使用show full columns from tablename這條語句,這里需要重申的是;服務器、數據庫和數據表都可以指定“字符集”, 而字段卻不能指定字符集,字段只能指定“整理規則”,這個整理規則中就可以認為包含了字段的字符集以及比較/排序規則,即使前3個層次的字符集默認的 都是 latin1,但是如果字段的字符集整理為 gbk_chinese_ci的話, 也能正常顯示中文[4]。

2.3 出現中文亂碼的原因

我們在學習了字符集編碼問題后就明白:在顯示器上看見的文字、圖片等信息在計算機內部存儲的內容其實并不是我們看見的樣子,也就是計算機并不是簡單的原樣重現的,即使假如所有的信息都在硬盤中存儲,我們拆開它看到了也只有盤片,沒有我們想看到的數據信息。計算機硬盤只能用0和1來存儲各種信息,比如小張用1100001來表示A,小李用11000010來存儲A,可能小李用1100001來存儲的是X,那么小張把1100001發給小李,小李就會看成X,這就是小張和小李使用了不同的編碼表,不同的編碼表0和1的對應關系不同,當然顯示的就是不同結果,所以在事先交流數據信息時,需要明確自己要使用的編碼,或者通過轉換編碼,就像翻譯不同語言一樣,才可以實現無亂碼溝通。

在Windows系統中安裝MySQL數據庫軟件時,我們知道MySQL服務器會有一個關于服務器字符集和服務器校驗規則的設置,而且這兩個設置均不能為空,如果選擇默認設置,那么Latin1是MySQL服務器的默認字符集,其對應的校驗規則是Latin_Swedish_ci,也 就 是default-character-set=Latin1,collation_server=Latin_Swedish_ci。基于前面的介紹我們知道,latin1字符集不能編碼中文字符, 所以MySQL控制臺或者返回:“Incorrect string value ......”, 或者返回“Data too long for column ......”,從而導致數據插入不成功,即使插入成功也會在數據表里顯示亂碼的現象。

3 解決方案

隨著我國計算機科學技術的飛速發展,錄入中文信息已經變得非常普遍,那么我們在安裝和配置MySQL數據庫軟件時就要考慮到字符編碼的問題,所以在我們配置MySQL服務器環境時就需要將字符集(default-character-set)設置為gbk,此時校驗規則就會自動跟gbk字符集匹配,當然也可以設置為 gbk_chinese_ci。這里,簡單介紹一下存在校對規則命名的約定: 它們以其相關的字符集名開始, 通常包括一個語言名, 并且以 _ci( 忽略大小寫) 、_cs( case sensitive, 大小寫敏感) 或 _bin( 二進制) 結束。我們可以根據需要選擇不同的校驗規則。如果在配置過程中忽略了字符集編碼的問題,那么也不必擔心,我們可以給出以下幾種解決方案:

3.1 在DOS環境下修改數據庫和數據表的編碼方式

我們需要使用alter database petstore character set gbk collate gbk_chinese_ci來修改其字符編碼方式,之后在創建數據表時也要保證其字符編碼與其所在的數據庫一致。可以使用SQL語句show create table 數據表表名,如果從開始都是使用默認字符集,沒有修改它的編碼方式,此時極可能查看到該數據表的默認編碼方式是Latin1,那么我們需要繼續使用alter語句來修改,具體SQL語句為Alter table 數據表 default character set gbk collate gbk_chinese_ci,這是更改表默認的字符集的SQL語句。另外,也需要使用上一步的alter database petstore character set gbk collate gbk_chinese_ci把數據庫的編碼方式也一并修改了,讓數據庫和它其中的數據表編碼方式保持統一,都為gbk,當然gb2312也是可以的。

還有一種情況就是所有的字符集設置都是正確的,但仍然有亂碼,這時應該是因為連接級字符集不正確造成的,連接級字符集由character_set_client、character_set_connection、character_set_results三個變量決定,這時需要把這三個變量均設置為支持中文的字符集,比如設置為gbk或者gb2312即可。可以如下三條命令來改變連接級字符集:

3.2 在圖形界面環境下修改

除了上述在DOS環境下修改字符編碼方式,當然也可以在SQLyog圖形編輯器中修改,在左側數據庫目錄里選擇要修改編碼方式的數據庫對其右擊,選擇改變數據庫,接著在彈出的窗口中修改其基字符集和數據庫排序規則,然后保存更改設置。

3.3 在MySQL配置文件中修改默認字符編碼方式

MySQL中文顯示亂碼或者問號是因為選用的編碼不對或者編碼不一致造成的,首先我們可以在安裝配置MySQL環境時就選擇其編碼方式為gbk或者gb2312,如果忽略了這一點還有另外一種方法:通過修改my.ini配置文件。通過MySQL文件存放的目錄,打開文件名為my.ini配置文件,找到default-character-set這句配置信息,很顯然這里指明了當前數據庫環境的默認編碼方式,此時我們需要將default-character-set設為gbk(或者gb2312)(有的版本不支持default-character-set=gbk,這時我們可以使用character_set_server=gbk來取代 default-character-set=gbk即可),修改之后保存文件,通過進入Windows服務管理器啟動MySQL服務,重新啟動一下該服務;或者以管理員身份運行cmd.exe,進行如下操作:

關閉服務 net stop mysql;

開啟服務 net start mysql。

但此處需要注意的是:我們在my.ini文件中修改的defaultcharacter-set字符集只會對MySQL其自身客戶端起作用,對其他客戶端數據庫程序無效,比如如果是通過web頁面顯示的數據庫內容,開發人員必須在web程序中指定正確的編碼方式,如果有誤,亂碼就會顯示在頁面中。設置成功之后,就可以來查看是否改變了編碼格式。還是在DOS環境中:

(1)輸入 mysql -u root –p,進入MySQL數據庫 ;

(2)鍵入密碼:*****(自己的密碼,沒有的話直接回車鍵。);

(3)show variables like 'char%';顯示編碼格式;

進入DOS環境或者sqlyog,這時通過show語句查看數據庫或者數據表文件,我們就會發現修改已經生效,這時可以通過insert語句試著插入一條中文字符的記錄驗證一下。

4 總結

綜上所述,我們知道MySQL數據庫作為全球最受歡迎的數據庫平臺,正在擁有越來越多的中文編程環境用戶,本篇介紹了MySQL數據庫中字符編碼的相關知識,并且指出我們在使用MySQL數據庫會出現的中文亂碼現象的根本原因,通過分析亂碼問題,我們知道這歸根結底是字符集編碼的問題,我們通過調試SQL代碼細節指出問題所在之處,然后通過實際操作給出了幾種切實可行的解決方案,我們只要正確設置各個級別的字符集問題,那么亂碼問題就不會成為我們學習中的障礙,這有助于我們更加深入地學習MySQL數據庫知識。

猜你喜歡
規則數據庫
撐竿跳規則的制定
數獨的規則和演變
規則的正確打開方式
幸福(2018年33期)2018-12-05 05:22:42
讓規則不規則
Coco薇(2017年11期)2018-01-03 20:59:57
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
TPP反腐敗規則對我國的啟示
搜索新規則
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
主站蜘蛛池模板: 日本三级黄在线观看| 久久伊伊香蕉综合精品| 就去吻亚洲精品国产欧美| 狠狠综合久久| 97在线观看视频免费| 国产chinese男男gay视频网| 91在线中文| 中文字幕乱妇无码AV在线| 久久黄色免费电影| 亚洲愉拍一区二区精品| 免费午夜无码18禁无码影院| 国产成a人片在线播放| 制服丝袜 91视频| 国产成人91精品免费网址在线| 免费va国产在线观看| 在线看片国产| 伊人色在线视频| 欧美全免费aaaaaa特黄在线| 国产精品三级av及在线观看| 国产手机在线小视频免费观看| 成人年鲁鲁在线观看视频| 波多野结衣中文字幕一区二区| 欧美成人h精品网站| 米奇精品一区二区三区| 手机精品视频在线观看免费| 亚洲精品日产AⅤ| 91久久国产综合精品女同我| 内射人妻无套中出无码| 亚洲成人高清无码| 超清无码一区二区三区| 亚洲国产AV无码综合原创| 91探花国产综合在线精品| 永久毛片在线播| 曰韩人妻一区二区三区| 制服丝袜 91视频| 国产乱子伦精品视频| 丁香婷婷激情网| 欧美激情二区三区| 国产精品观看视频免费完整版| 欧美无专区| 国产一级二级三级毛片| 视频一区视频二区中文精品| 欧美啪啪一区| 久久综合亚洲鲁鲁九月天| 日韩黄色精品| 欧美日本激情| 欧美激情第一区| 免费欧美一级| 国产制服丝袜91在线| 国产精品手机视频| 女人18毛片水真多国产| 婷婷综合缴情亚洲五月伊| 丁香亚洲综合五月天婷婷| 亚洲中文在线看视频一区| 青青草原国产免费av观看| 精品无码日韩国产不卡av| 国产香蕉在线视频| 久久黄色小视频| 第九色区aⅴ天堂久久香| 亚洲人成色在线观看| 无码AV日韩一二三区| 久久频这里精品99香蕉久网址| 真人免费一级毛片一区二区| 国产亚洲精| 国产91精品最新在线播放| 国产精品一区在线麻豆| 国产男女免费视频| 久久久亚洲国产美女国产盗摄| 国产激爽大片在线播放| 亚洲国产欧美中日韩成人综合视频| 亚洲人成网站观看在线观看| 日本国产一区在线观看| 伊人色综合久久天天| 欧美怡红院视频一区二区三区| 国产真实乱子伦视频播放| 97国内精品久久久久不卡| 狠狠色丁婷婷综合久久| 天堂在线亚洲| 美女一级毛片无遮挡内谢| 久久综合激情网| 久草网视频在线| 综合天天色|