方法一:
通過增加參數
–default-character-set
=
utf8
解決亂碼問題
mysql
-u
root
-p
password
<
path_to_import_file
–default-character-set
=
utf8
方法二:
在命令行導入亂碼解決
1.
use
database_name;
2.
set
names
utf8;
(或其他需要的編碼)
3.
source
example.sql
(sql文件存放路徑)
方法三:
直接粘貼sql文件里的代碼
1.
打開sqlyog客戶端軟體;
2.
定位到sql編輯器,然後用記事本打開剛剛導出的sql文件;
3.
復制文件中所有sql語句到sql編輯器當中,執行這些sql代碼;
方法四:
用記事本或其他文本工具改變sql文件的編碼格式(若方法三不行,那就嘗試方法四)
1.
用記事本(或ue)打開剛才的導出的sql文件;
2.
另存此文件——打開另存為對話框,選擇對話框中的編碼格式為unicode編碼;
3.
保存文件,然後ctrl+a,全選;
4.
復制裡面的sql語句到sqlyog中的「sql編碼器」當中,再執行一次sql語句;
5.
執行完成後切記刷新一次,查看中文的數據表,亂碼消除,大功告成;
② SQL插入數據中文為亂碼
請直接在sql 查詢器中執行以上語句,如果仍有亂碼,很可能是資料庫的字元集沒有設置好。
如果你用的是sql server 2000,
最好檢查該資料庫的字元集 (Collation) 是不是 gb2312類, 例如
Chinese_PRC_CI_AS
③ sql文件導入後,中文變亂碼,怎樣解決
解決的方法和詳細的操作步驟如下:
1、首先,單擊「Objects」按鈕以查看有關此表的詳細信息,如下圖所示,然後進入下一步。
④ 在導入sql server資料庫時,怎麼老是出現亂碼呀
客戶端和服務端的字元集不一致造成態毀的,調整成一致就行了。
查詢字元集的方法為:
use master
go
select * from syscharsets
go
如果記錄中chinses_prc開頭的都是支持簡體中文的字元集
1. 字元集是支持雙位元組的字元集如中文字元集(Collation name為Chinese_PRC_CI_AS)
<1>. 定義varchar(2)
(1) 正式表
總結:在中文字元集下,定義varchar(x), 不論使用不使用N'',英文字元都佔1個位元組,即可以存x個英文字元; 不論使用不使用N'',中文字元都佔2個位元組,即可以存(x / 2)個中文,select結果為漢字本身,不是亂碼。
(2) 臨時表
總結:在中文字元集下,定義varchar(x), 和正式表表帆納備現一樣;
<2>. 定義nvarchar(2)
(1) 正式表
總結:在中文字元集下,定義nvarchar(x), 不論使用不使用N'',英文字元都佔2個位元組,即可以存x個英文字元; 不論使用不使用N'',中文字元都佔2個位元組,即可以存x個中文,select結果為漢字本身,不是亂碼。
(2) 臨時表
總結:在中文字元集下,定義nvarchar(x), 和正式表表現一樣。
<3>. 類型為varchar時,長度 x 和 datalength()對應,都指位元組大小; 英文len() = datalength();中文len() = datalength() / 2;類型為nvarchar時,長度 x 和 len()對應,都指字元長度。
2. 字元集是支持單位元組的字元集如拉丁字元集(Collation name為Latin1_General_CI_AS)
<1>. 定義varchar(2)
(1) 正式表
總結:在英文字元集下,定義varchar(x),不論使用不使用N'',英文字元都佔1個位元組,即可以存x個英文字元;不論使用不使用N'',中文字元都佔1個位元組,即可以存x個中文,但茄衡只保存前半截中文編碼,所以select結果為亂碼;(特殊:如果使用N'',此時插入的字元數最大為4000)
英文和中文 len() = datalength();
(2) 臨時表
總結:在英文字元集下,定義varchar(x), 不論使用不使用N'',英文字元都佔1個位元組,即可以存x個英文字元;不使用N''時,中文佔1個位元組,可以存x個漢字,但都只存入漢字前半截字元編碼,顯示為亂碼;使用N''時,中文佔2個位元組,只可以存 x/2 個漢字,沒有亂碼,取出仍為漢字,說明在英文字元集下通過使用N''是可以保存漢字的;除用N''保存的中文外,其餘英文和中文 len() = datalength();用N''保存的中文字元len() = datalength() / 2;
<2>. 定義nvarchar(2)
(1) 正式表
總結:在英文字元集下,定義nvarchar(x),不論使用不使用N'',英文字元都佔2個位元組,即可以存x個英文字元;(注意每個字元比varchar用的空間大)不論使用不使用N'',中文字元都佔2個位元組,即可以存x個中文字元,但不使用N''只保存前半截中文編碼,所以select結果為亂碼;使用N''則保存和取出都為漢字本身;
(2) 臨時表
總結:在英文字元集下,定義nvarchar(x), 和正式表表現相同;
<3>. 類型為varchar時,長度 x 和 datalength()對應,都指位元組大小;(臨時表中N''中文字元長度比較特殊;) 類型為nvarchar時,長度 x 和 len()對應,都指字元長度。
二、 使用歸類
拋開不常用的臨時表不談,只看正式表,再加上varchar和nvarchar類型的最大長度,得到以下經驗:
<1> 最大長度問題
1. 在中文字元集下使用varchar,最大長度可定義8000,這個8000是指位元組數(datalength()),即最大可以保存8000個英文字元,4000個中文字元。
特殊:若存入字元N'a',則最大能保存4000個字元,但其所佔空間為4000位元組。
2. 在中文字元集下使用nvarchar,最大長度可定義4000,這個4000是指字元個數(len()),即最大可以保存4000個英文字元,4000個中文字元。
3. 在英文字元集下使用varchar,最大長度可定義8000,這個8000是指位元組數(datalength()),由於中文英文都保存為1位元組,故最大可以保存8000個英文、中文字元。
4. 在英文字元集下使用nvarchar,最大長度可定義4000,這個4000是指字元個數(len()),即最大可以保存4000個英文字元,4000個中文字元。
<2> 文字顯示問題
1. N''要和數據類型nvarchar, nchar一起使用,如果對varchar, char欄位類型強制使用N'',則會產生一些特殊現象,甚至無法控制。
2. 在英文字元集下,想要保存特殊符號字元、中文等雙位元組字元,在定義表結構時要使用nvarchar或者nchar,在保存時要用N''。
3. 在中文字元集下,資料庫系統預設已經可以保存特殊符號字元、中文等雙位元組字元。即使用不使用N'',都按雙位元組處理。但為了統一期間建議,在定義表結構時如果使用nvarchar或者nchar,在保存時要用N'',在定義表結構時如果使用varchar和char,此時不要使用N''操作。
4. SUBSTRING ( expression , start , length ) 。length:是一個整數,指定子串的長度(要返回的字元數或位元組數)。 中文字元集中按字元數取;英文字元集中,char, varchar按位元組數取,nchar, nvarchar按字元數取;
三、 其他參考
使用 Unicode 數據
unicode代碼頁、排序規則、SQL Server 排序規則基礎知識、Windows 排序規則排序樣式、選擇 SQL 排序規則、 DBCS 字元