掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
數(shù)據(jù)庫(kù)的字符集編碼是非常重要的一個(gè)概念,它直接決定了數(shù)據(jù)庫(kù)中數(shù)據(jù)的編碼方式和存儲(chǔ)格式,它的設(shè)置也會(huì)影響到數(shù)據(jù)的讀取和處理,因此,在使用數(shù)據(jù)庫(kù)時(shí),我們需要非常注意字符集編碼的設(shè)置和使用。

那么,數(shù)據(jù)庫(kù)的字符集編碼位于哪個(gè)位置呢?在回答這個(gè)問題之前,我們首先需要了解一下什么是字符集編碼。
什么是字符集編碼?
字符集編碼是一種將字符集中的字符轉(zhuǎn)換為二進(jìn)制數(shù)的方法,通常來說,一個(gè)字符集中有很多個(gè)字符,每個(gè)字符都要對(duì)應(yīng)著一個(gè)獨(dú)特的二進(jìn)制數(shù),這就是字符集編碼。
由于計(jì)算機(jī)只能夠處理二進(jìn)制數(shù),因此,當(dāng)我們需要讓計(jì)算機(jī)識(shí)別和存儲(chǔ)字符時(shí),就必須將字符轉(zhuǎn)換為二進(jìn)制數(shù),這就是字符集編碼的作用。
不同的字符集編碼方式有不同的規(guī)則和方式,例如,ASCII編碼使用7位二進(jìn)制數(shù)表示一個(gè)字符,而Unicode編碼使用16位或32位的二進(jìn)制數(shù)表示一個(gè)字符,我們?cè)谑褂脭?shù)據(jù)庫(kù)時(shí),需要根據(jù)實(shí)際情況選擇不同的字符集編碼方式。
回到最初的問題,數(shù)據(jù)庫(kù)的字符集編碼位于哪個(gè)位置呢?
數(shù)據(jù)庫(kù)的字符集編碼設(shè)置通常分為兩個(gè)方面:數(shù)據(jù)庫(kù)實(shí)例的字符集編碼和數(shù)據(jù)庫(kù)表的字符集編碼。
1. 數(shù)據(jù)庫(kù)實(shí)例的字符集編碼
數(shù)據(jù)庫(kù)實(shí)例的字符集編碼是指整個(gè)數(shù)據(jù)庫(kù)中所有表的字符集編碼的默認(rèn)設(shè)置,如果在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)沒有指定字符集編碼,則會(huì)使用操作系統(tǒng)的默認(rèn)編碼。
在MySQL等數(shù)據(jù)庫(kù)中,我們可以通過以下SQL語(yǔ)句來查看數(shù)據(jù)庫(kù)實(shí)例的字符集編碼:
“`
SHOW VARIABLES LIKE ‘character_set_database’;
“`
輸出結(jié)果可能如下所示:
“`
Variable_name Value
———————
character_set_database utf8
“`
這說明當(dāng)前的數(shù)據(jù)庫(kù)實(shí)例的字符集編碼是utf8。
我們也可以通過以下SQL語(yǔ)句來修改數(shù)據(jù)庫(kù)實(shí)例的字符集編碼:
“`
ALTER DATABASE dbname CHARACTER SET utf8;
“`
2. 數(shù)據(jù)庫(kù)表的字符集編碼
與數(shù)據(jù)庫(kù)實(shí)例的字符集編碼不同,數(shù)據(jù)庫(kù)表的字符集編碼是指每個(gè)表的字符集編碼設(shè)置,這個(gè)設(shè)置會(huì)影響到當(dāng)前表中所有字段的字符集編碼。
在MySQL等數(shù)據(jù)庫(kù)中,我們可以通過以下SQL語(yǔ)句來查看表的字符集編碼:
“`
SHOW CREATE TABLE tablename;
“`
輸出結(jié)果可能如下所示:
“`
CREATE TABLE `tablename` (
`id` int(11) NOT NULL,
`name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`age` int(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
“`
以上結(jié)果表明,當(dāng)前表的字符集編碼是utf8_unicode_ci。
我們也可以通過以下SQL語(yǔ)句來修改表的字符集編碼:
“`
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
“`
通過以上介紹,我們可以得出結(jié)論:數(shù)據(jù)庫(kù)的字符集編碼設(shè)置位于數(shù)據(jù)庫(kù)實(shí)例和表的設(shè)置中,根據(jù)實(shí)際情況設(shè)置不同的字符集編碼,能夠更好的保證數(shù)據(jù)的存儲(chǔ)和使用。
相關(guān)問題拓展閱讀:
首先查看oracle數(shù)據(jù)庫(kù)的編碼:SQL>念卜select*fromnls_database_parameterswhereparameter=’NLS_CHARACTERSET’;修改字符集編碼(這會(huì)對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)有直接的影響,謹(jǐn)慎操雹返作):SQL>conn/assysdbaSQL>shutdownimmediate;SQL>startupmount;SQL>ALTERSYSTEMENABLERESTRICTEDSESSION;SQL>ALTERSYSTEMSETJOB_QUEUE_PROCESSES=0;SQL>ALTERSYSTEMSETAQ_TM_PROCESSES=0;SQL>源高饑alterdatabaseopen;SQL>ALTERDATABASEcharactersetINTERNAL_USEZHS16GBK;SQL>shutdownimmediate;SQL>startup
SQL>神野selectuserenv(‘language’游冊(cè)喊)fromdual;USERENV(‘LANGUAGE’姿凳)SIMPLIFIEDCHINESE_CHINA.AL32UTF8
mysql 創(chuàng)建 數(shù)據(jù)庫(kù)時(shí)指定編碼很重要,很多開發(fā)者都使用了默認(rèn)編碼,亂碼問題可是防不勝防。制定數(shù)據(jù)庫(kù)的編碼可以很大程度上避免倒入導(dǎo)出帶來的亂碼問題。
網(wǎng)頁(yè)數(shù)據(jù)一般采用UTF8編碼,而數(shù)據(jù)庫(kù)默認(rèn)為latin 。我們可以通過修改數(shù)據(jù)庫(kù)默認(rèn)編碼方式為UTF8來減少數(shù)據(jù)庫(kù)創(chuàng)建時(shí)的設(shè)置,也能更大限度的避免因粗心造成的亂碼問題。
我們遵循的標(biāo)準(zhǔn)是,數(shù)據(jù)庫(kù),表,字段和頁(yè)面或文本的編碼要統(tǒng)一起來
我們可以通過命令查看數(shù)據(jù)庫(kù)當(dāng)前編碼:
mysql> SHOW VARIABLES LIKE ‘character%’;
發(fā)現(xiàn)很多對(duì)應(yīng)的都是 latin1,我們的目標(biāo)就是在下次使用此命令時(shí)latin1能被UTF8取代。
之一階段:
mysql設(shè)置編碼命令
view plain copy
SET character_set_client 灶納猛= utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
然后 mysql> SHOW VARIABLES LIKE ‘character%’; 你可以看到全變?yōu)?nbsp;utf8
。
但是,這只是一種假象
此種方式只在當(dāng)前狀態(tài)下有效,當(dāng)重啟數(shù)據(jù)庫(kù)服務(wù)后失效。
所以如果想要不出現(xiàn)亂碼只有修改my.ini文件,
從my.ini下手(標(biāo)簽下沒有的添加,有的修改)
default-character-set=utf8
default-character-set=utf8
default-character-set=utf8
以上3個(gè)section都要加default-character-set=utf8,平時(shí)我們可能只加了mysqld一項(xiàng)。
然后重啟mysql,執(zhí)行
mysql> SHOW VARIABLES LIKE ‘character%’;
確保所有的Value項(xiàng)都是utf8即可
。
但是可惡的事情又來了,
|character_set_client | utf|
| character_set_connection | utf|
| character_set_database | utf|
| character_set_filesystem | binary 隱橋 |
| character_set_results | utf|
| character_set_server | latin茄基 |
| character_set_system | utf
注意 該配置| character_set_server | latin1 無法設(shè)置成UTF8 交互時(shí)候仍然會(huì)出現(xiàn)亂碼
。
第二階段:找到下面這東東
X:\%path%\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe
重新啟動(dòng)設(shè)置,將默認(rèn)編碼設(shè)置為utf8.這樣就能達(dá)到我們所要的效果了
。
mysql> SHOW VARIABLES LIKE ‘character%’;
++-+
| Variable_name| Value|
++-+
| character_set_client | utf|
| character_set_connection | utf|
| character_set_database | utf|
| character_set_filesystem | binary|
| character_set_results | utf|
| character_set_server | utf|
| character_set_system | utf|
| character_sets_dir| C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
++-+
由于mysql默認(rèn)的字符集編唯辯歲碼為灶搭latin ,而我們一般使用的是gbk 或者 gb2312編碼
所以不改過來容易造成亂碼
我用的是mysql 5.0 安裝程序安裝的 ,安裝目錄在C:\指睜Program Files\MySQL\MySQL Server 5.0
請(qǐng)到這個(gè)目錄下面找到 my。ini文件
修改default-character-set=latin1 為 default-character-set=gbk
記住有兩個(gè)地方啊 都要改
最重要的一點(diǎn)就是修改文件前,先停止mysql服務(wù) ,等修改后再重新啟動(dòng)
使用dos命令 :net stop mysql 來停止服務(wù) net start mysql 來啟動(dòng)
然后在執(zhí)行你的mysql腳本 ,一切ok! 這里你可以用discuz的sql做為例子運(yùn)行!
數(shù)據(jù)庫(kù)字符集編碼在哪里的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù)字符集編碼在哪里,數(shù)據(jù)庫(kù)的字符集編碼位于哪個(gè)位置?,怎么查看oracle數(shù)據(jù)庫(kù)中的的編碼格式,如何更改MySQL數(shù)據(jù)庫(kù)編碼為UTF-8或者GB2312?,mysql-..修改默認(rèn)的字符集在哪里的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)網(wǎng)絡(luò)推廣網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),網(wǎng)站建設(shè)公司,網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),1500元定制網(wǎng)站優(yōu)化全包,先排名后付費(fèi),已為上千家服務(wù),聯(lián)系電話:13518219792

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流