《Mysql學習mysql 編碼轉換三種方法》要點:
本文介紹了Mysql學習mysql 編碼轉換三種方法,希望對您有用。如果有疑問,可以聯系我們。
本節內容:
如何實現mysql編碼轉換MYSQL數據庫
方法一:
步驟一 命令行執行:mysqldump --opt -hlocalhost -uroot -p*** --default-character-set=lantin1 dbname > /usr/local/dbname.sql
步驟二 將 dbname.sql文件中的create table語句的CHARSET=latin1改為CHARSET=utf8
步驟三 在dbname.sql文件中的insert語句之前加一條'set names utf8;'
步驟四 將dbname.sql轉碼為utf-8格式,建議使用UltraEditor,可以直接使用該編輯器的'轉換->ASCII到UTF-8(Unicode編輯)',或者將文件另存為UTF-8(無BOM)格式
步驟五 命令行執行:mysql -hlocalhost -uroot -p*** --default-character-set=utf8 new_dbname < /usr/local/dbname.sql
總結:這種方法有個致命之處就是當數據中有大量中文字符和其他特殊符號字符時,很有可能導致在[步驟五]時報錯導致無法正常導入數據,如果數據庫比較大,則可以分別對每張表執行上述步驟.MYSQL數據庫
方法二(推薦使用):
解決第一種方法中總結時說到的問題.
步驟一 將待導出的數據表的表結構導出(可以用Phpmyadmin、mysqldump等,很簡單就不說 了),然后將導出的create table語句的CHARSET=latin1改為CHARSET=utf8,在目標庫newdbname中執行該create table語句把表結構建好,接下來開始導出-導入數據.命令:
./mysqldump -d DB_Dig > /usr/local/tmp/tables.sql
步驟二 命令行:進入mysql命令行下,mysql -hlocalhost -uroot -p*** dbname
步驟三 執行SQL select * from tbname into outfile '/usr/local/tbname.sql';
步驟四 將tbname.sql轉碼為utf-8格式,建議使用UltraEditor,可以直接使用該編輯器的'轉換->ASCII到UTF-8(Unicode編輯)',或者將文件另存為UTF-8(無BOM)格式
步驟五 在mysql命令行下執行語句 set character_set_database=utf8; 注:設置mysql的環境變量,這樣mysql在下一步讀取sql文件時將以utf8的形式去解釋該文件內容
步驟六 在mysql命令行下執行語句 load data infile 'tbname.sql' into table newdbname.tbname;
注意:千萬不要忘了第四步 (腳本學堂 www.jbxue.com)
采用第二種方法,所有數據均正常導入,且格式轉換成功沒有亂碼.MYSQL數據庫
方法三
個人建議,數據庫字符集盡量使用utf8(utf-8),以使你的數據能很順利的實現遷移,因為utf8字符集是目前最適合于實現多種不同字符集之間的轉換的字符集,盡管你在命令行工具上無法正確查看數據庫中的內容,我依然強烈建議使用utf8作為默認字符集.MYSQL數據庫
例子:
1,創建數據庫表
?MYSQL數據庫
2,寫數據
通過php直接插入數據:
?MYSQL數據庫
<?php
mysql_connect('localhost','user','password');
mysql_select_db('my_db');MYSQL數據庫
//請注意,這步很關鍵,如果沒有這步,所有的數據讀寫都會不正確的
//它的作用是設置本次數據庫聯接過程中,數據傳輸的默認字符集
mysql_query("set names utf8;");MYSQL數據庫
//必須將gb2312(本地編碼)轉換成utf-8,也可以使用iconv()函數
mysql_query(mb_convet_encoding("insert into my_table values('測試');", "utf-8", "gb2312"));
?>
?MYSQL數據庫
通過頁面提交插入數據:
?MYSQL數據庫
<?php
//輸出本頁編碼為utf-8
header("content-type:text/html; charset=utf-8");MYSQL數據庫
mysql_connect('localhost','user','password');
mysql_select_db('my_db');MYSQL數據庫
if(isset($_REQUEST['name'))
{
?? //由于上面已經指定本頁字符集為utf-8了,因此無需轉換編碼
?? mysql_query(sprintf("insert into my_table values('%s');", $_REQUEST['name']));
}MYSQL數據庫
$q = mysql_query("select * from my_table");
while($r = mysql_fetch_row($q))
{
?? print_r($r);
}
?>MYSQL數據庫
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form action="" method="post">
<input type="text" name="name" value="">
<input type="submit" value='submit'>
</form>
?MYSQL數據庫
自此,使用utf8字符集的完整的例子結束了.
如果你想使用gb2312編碼,那么建議你使用latin1作為數據表的默認字符集,這樣就能直接用中文在命令行工具中插入數據,并且可以直接顯示出來.而不要使用gb2312或者gbk等字符集,如果擔心查詢排序等問題,可以使用binary屬性約束,例如:
create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;MYSQL數據庫
附:舊數據升級辦法
以原來的字符集為latin1為例,升級成為utf8的字符集.原來的表: old_table (default charset=latin1),新表:new_table(default charset=utf8).
第一步:導出舊數據
?MYSQL數據庫
第二步:轉換編碼
?MYSQL數據庫
在這里,假定原來的數據默認是gb2312編碼.
第三步:導入
修改old.sql,增加一條sql語句: "SET NAMES utf8;",保存.
?MYSQL數據庫
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6483.html