新聞中心
在實(shí)際的數(shù)據(jù)庫應(yīng)用過程中,中文數(shù)據(jù)的處理是一個(gè)比較頭疼的問題。很多初學(xué)者在進(jìn)行SQL數(shù)據(jù)庫操作時(shí),經(jīng)常會(huì)遇到中文亂碼的情況。其實(shí),正確地寫入中文數(shù)據(jù)是非常重要的,因?yàn)橹形臄?shù)據(jù)是我們生活和工作中常常涉及到的數(shù)據(jù)。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供繁峙網(wǎng)站建設(shè)、繁峙做網(wǎng)站、繁峙網(wǎng)站設(shè)計(jì)、繁峙網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、繁峙企業(yè)網(wǎng)站模板建站服務(wù),十年繁峙做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
本文將介紹如何正確地寫入中文數(shù)據(jù)到SQL數(shù)據(jù)庫中。
一、數(shù)據(jù)庫字符集的設(shè)置
數(shù)據(jù)庫是個(gè)存儲(chǔ)數(shù)據(jù)的容器,而字符集則是這個(gè)容器的重要組成部分。在創(chuàng)建數(shù)據(jù)庫時(shí),要明確數(shù)據(jù)庫的字符集應(yīng)該設(shè)為什么。如果數(shù)據(jù)庫字符集不支持中文,則無論插入什么中文字符,都可能顯示成亂碼。
在MySQL中,不同的字符集有不同的特點(diǎn)和用途。其中,最常用的字符集是utf8和gbk。utf8是一種可變長(zhǎng)度的Unicode編碼,能表示全世界范圍內(nèi)的字符。而gbk是國(guó)家標(biāo)準(zhǔn),只能表示中文、日文、韓文等。
為了讓數(shù)據(jù)庫支持中文數(shù)據(jù),建議選擇utf8字符集。在創(chuàng)建數(shù)據(jù)庫時(shí),可以通過以下語句來指定字符集:
CREATE DATABASE db_name CHARACTER SET utf8;
同樣,在創(chuàng)建表時(shí)也可以指定表的字符集:
CREATE TABLE tb_name (
col_name VARCHAR(20) CHARACTER SET utf8
);
二、在SQL語句中使用N字符
在SQL語句中,如果希望插入一個(gè)中文字符串,需要在字符串前面加上N字符,如下所示:
INSERT INTO tb_name (col_name) VALUES (N’中文字符串’);
這是因?yàn)镾QL Server和Oracle都使用Unicode編碼,插入N字符可以保證字符串以Unicode編碼存儲(chǔ)。
三、使用PHP函數(shù)處理中文字符
在PHP中,可以使用mb_string擴(kuò)展庫中的函數(shù)來處理中文字符。mb_string(multi-byte string)擴(kuò)展庫是一個(gè)專門用于處理多字節(jié)字符串的庫。
以下是幾個(gè)常用函數(shù):
mb_internal_encoding()函數(shù):設(shè)置內(nèi)部編碼,即PHP腳本中的編碼。一般設(shè)置為utf8。
mb_strlen() 函數(shù):返回字符串的字節(jié)數(shù),因?yàn)橹形恼加玫淖止?jié)數(shù)不同于ASCII字符。
mb_substr() 函數(shù):截取多字節(jié)字符串中的一段子串。
mb_convert_encoding() 函數(shù):轉(zhuǎn)換字符串的字符集。
四、在PHP中轉(zhuǎn)義中文字符
為了防止SQL注入攻擊,需要對(duì)中文字符進(jìn)行轉(zhuǎn)義處理。在PHP中,可以使用mysqli_real_escape_string()函數(shù)對(duì)字符串進(jìn)行轉(zhuǎn)義處理。
以下是一個(gè)例子:
$con = mysqli_connect(“l(fā)ocalhost”, “my_user”, “my_password”, “my_db”);
// 檢查連接是否成功
if (mysqli_connect_errno()) {
echo “連接失敗: ” . mysqli_connect_error();
exit();
}
$mystring = “中文數(shù)據(jù)”;
$mystring = mysqli_real_escape_string($con, $mystring);
mysqli_query($con, “INSERT INTO tb_name (col_name) VALUES (‘$mystring’)”);
mysqli_close($con);
?>
以上代碼將“中文數(shù)據(jù)”插入到tb_name表的col_name列中,已經(jīng)做了轉(zhuǎn)義處理。
五、
以上就是在SQL數(shù)據(jù)庫中正確地寫入中文數(shù)據(jù)的方法。要點(diǎn)是指定正確的字符集、在SQL語句中使用N字符、在PHP中使用mb_string擴(kuò)展庫進(jìn)行字符處理和使用mysqli_real_escape_string()函數(shù)進(jìn)行轉(zhuǎn)義處理。
通過正確地處理中文數(shù)據(jù),可以使得我們的數(shù)據(jù)庫應(yīng)用更加規(guī)范和健壯。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220向sql server2023中插入中文數(shù)據(jù),顯示為????
之一種辦法:先選中出錯(cuò)的數(shù)據(jù)庫→選中以后右鍵點(diǎn)擊屬性會(huì)彈出數(shù)據(jù)庫屬性
對(duì)話框→選中數(shù)據(jù)庫屬性對(duì)話框中的選項(xiàng)→把選項(xiàng)中的排序規(guī)則設(shè)置成:Chinese_PRC_90_CI_AS→最后點(diǎn)擊確定即可。
(注意:在選擇數(shù)據(jù)庫屬性的時(shí)候必須確保你所修改的數(shù)據(jù)庫未被使用才可以修改否則會(huì)失敗的)
第二種辦法:首先打開你的sql查詢分析器(新建查詢),然后輸入以下代碼執(zhí)行即
可:ALTER
DATABASE
數(shù)據(jù)庫名
COLLATE
Chinese_PRC_90_CI_AS
例如:
ALTER
DATABASE
9NPC
COLLATE
Chinese_PRC_CI_AI
ALTER
DATABASE
AutoUpgrade
COLLATE
Chinese_PRC_CI_AI
解析原因:出賣純讓現(xiàn)以上情況主要是因?yàn)閿?shù)據(jù)庫屬性的排序規(guī)則設(shè)置不正確,在Microsoft
SQL
Server
2023
中,字符串的物理存儲(chǔ)由排序規(guī)則控制。排序規(guī)則指定表示每個(gè)字符的位模式以及存儲(chǔ)和比較字符所使用的規(guī)則。
排序規(guī)則名稱由兩部份構(gòu)成,前半部份是指本排序規(guī)則所支持的字符集。
如:
Chinese_PRC_90_CI_AS
前半部份:指UNICODE字符集,Chinese_PRC_指針對(duì)大陸簡(jiǎn)體字UNICODE的排序規(guī)則。
排序規(guī)則的后半部份即后綴
含義:
_BIN
二進(jìn)制排序
_CI(CS)
是否區(qū)分大小寫,CI不區(qū)分,CS區(qū)分
_AI(AS)
是否區(qū)分重音,AI不區(qū)分,AS區(qū)分
_KI(KS)
是否區(qū)分假名類型&defKI不區(qū)分,KS區(qū)分
_WI(WS)
是否區(qū)分寬度
WI不區(qū)分,WS區(qū)分
區(qū)分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請(qǐng)選擇該選項(xiàng)。
區(qū)分重音:如果想讓比較將重音和非重音字母視為不等,請(qǐng)中局選褲信擇該選項(xiàng)。如果選擇該選項(xiàng),比較還將重音不同的字母視為不等。
區(qū)分假名:如果想讓比較將片假名和平假名日語音節(jié)視為不等,請(qǐng)選擇該選項(xiàng)。
區(qū)分寬度:如果想讓比較將半角字符和全角字符視為不等,請(qǐng)選擇該選項(xiàng)。
在tomcat conf目錄下server.xml,修改下面一段簡(jiǎn)悉塵陸伍
增加URIEncoding=”UTF-8″
試試··
分享一下,我在用STRUTS的DynaFrom時(shí)也遇到亂碼問題。主要是插入之前的櫻鬧液數(shù)據(jù)脊物就是亂碼。你可以試試在數(shù)據(jù)插入之前顯示出來看看。我的辦法是在數(shù)據(jù)插入之前轉(zhuǎn)換編碼。
public
String
Changetype(String
temp)
{
byte
tempe1=temp.getBytes(“iso”彎渣);
temp=new
String(tempe1);
}
解決亂碼確實(shí)是用Filter。
但正嫌攜是和舉伏你寫的不一樣的是,不用iso,而是用和數(shù)據(jù)庫、jsp相同者做的字符集,如utf-8之類的。
在tomcat
conf目錄下server.xml,修改下面一段
增加URIEncoding=”輪閉蘆UTF-8″臘帶
試試··
sql 數(shù)據(jù)庫寫入中文的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于sql 數(shù)據(jù)庫寫入中文,如何在SQL數(shù)據(jù)庫中正確地寫入中文數(shù)據(jù),向sql server2023中插入中文數(shù)據(jù),顯示為????的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營(yíng)銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
本文標(biāo)題:如何在SQL數(shù)據(jù)庫中正確地寫入中文數(shù)據(jù)(sql數(shù)據(jù)庫寫入中文)
URL分享:http://fisionsoft.com.cn/article/cosigij.html


咨詢
建站咨詢
