1. 程式人生 > >Mysql字符集問題

Mysql字符集問題

bsp root 登錄 cte 登錄mysql 表示 mysqldump 導出表 執行

方法1:
登錄mysql,先做set names latin1,然後在執行更新語句或執行語句文件

mysql> set names latin1;

方法2:

在sql文件中指定set names latin1;然後登錄mysql,通過如下命令執行

mysql> source test.sql;

方法3:

在sql文件中指定set names latin1;然後通過mysql命令導入數據

mysql -uroot -p123456 test < test.sql

mysql -uroot -p123456 test -e "set names latin1;select * from test.test;
" 方法4: 通過指定mysql命令的字符集參數實現--default-character-set=latin1 cat test.sql INSERT INTO test VALUES(9,張三); mysql -uroot -p123456 --default-character-set=latin1 test < test.sql 方法5: 在配置文件裏設置客戶端及服務端相關參數 [client] default-character-set=latin1 提示:無需重啟服務,退出登錄就生效 更改my.cnf參數 [mysqld] default-character-set=latin1 適合5.1及以前版本 character
-set-server=latin1 適合5.5 確保服務端和客戶端字符集相同 方法1: 登錄mysql,先做set names latin1,然後在執行更新語句或執行語句文件 mysql> set names latin1; 方法2: 在sql文件中指定set names latin1;然後登錄mysql,通過如下命令執行 mysql> source test.sql; 方法3: 在sql文件中指定set names latin1;然後通過mysql命令導入數據 mysql -uroot -p123456 test < test.sql mysql
-uroot -p123456 test -e "set names latin1;select * from test.test;" 方法4: 通過指定mysql命令的字符集參數實現--default-character-set=latin1 cat test.sql INSERT INTO test VALUES(9,張三); mysql -uroot -p123456 --default-character-set=latin1 test < test.sql 方法5: 在配置文件裏設置客戶端及服務端相關參數 [client] default-character-set=latin1 提示:無需重啟服務,退出登錄就生效 更改my.cnf參數 [mysqld] default-character-set=latin1 適合5.1及以前版本 character-set-server=latin1 適合5.5 確保服務端和客戶端字符集相同 1、linux系統服務端 cat /etc/sysconfig/i18n LANG="zh_CN.utf8" [root@localhost 3306]# echo $LANG zh_CN.UTF-8 提示:linux客戶端也要更改為UTF-8 2、Mysql數據庫的客戶端 臨時: mysql> set names utf8; 或者啟動時指定 mysql -uroot -p123456 --default-character-set=utf8 永久: 更改my.cnf客戶端的參數,可以實現set names utf8的效果,並且永久生效 [client] default-character-set=utf8 提示:配置文件修改無需重啟 3、Mysql服務端 更改my.cnf [mysqld] default-character-set=utf8 適合5.1及以前版本 character-set-server=utf8 適合5.5 4、Mysql數據庫中建庫建表指定字符集 create database test default character set utf8 collate utf8_general_ci; 5、開發程序字符集: 簡體UTF8
#對於已有的數據庫向修改字符集不能直接通過"alter database character set ..." 或 "alter table tablename character set ..." 修改,這兩個命令都沒有更新已有記錄的字符集

而只是對於新創建的表或者記錄生效,已經有記錄的字符集的調整,必須要先將數據導出,經過修改字符集後重新導入後才可完成。


下面模擬將latin1字符集的數據庫修改成GBK字符集的實際過程;

1、導出表結構
mysqldump -uroot -p --default-character-set=latin1 -d dbname >alltabl.sql ##--default-character-set=gbk 表示以gbk字符集進行連接 -d 只導表結構

2、編輯alltable.sql將latin1改成gbk

3、確保數據庫不再更新,導出所有數據
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 dbname > alldata.sql

參數說明:
--quick:用於轉儲大的表,強制mysqldump從服務器一次一行的檢索數據而不是檢索所有行

--no-create-info : 不創建create table 語句

--extended-insert : 使用包括幾個values列表的多行insert 語法,這樣文件更小,IO也小,導入數據時會非常快

--default-character-set=latin #按照原有的字符集導出數據,這樣導出的文件中,所有中文都是可見的,不會保存成亂碼

4、打開alldata.sql 將 set names latin1 修改成set names gbk

5、建庫
create database dbname default charset gbk;

6、創建表,執行alldata.sql
mysql -uroot -p dbname < alltable.sql

7、導入數據
mysql -uroot -p dbname < alldata.sql



Mysql字符集問題