Mysql字符集問題
阿新 • • 發佈:2018-07-25
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字符集問題