標籤:extend 方法 not stat 應該 admin ini select 修改編碼
ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latinl
source test.sql
root# mysql -uroot -p‘‘ oldboy < test.sql
default -charact-set=latinl
不亂碼的思想:Linux,用戶端,伺服器,庫,表,程式!
1、linux系統
root# cat /etc/sysconfig/i18n
#LANG="zh_CN.GB2312"
2、MySQL用戶端
臨時:
set 列名 latinl;
法1
#mysql -uroot -p
set names utf8
法2
#mysql -uroot -p --default-character-set=utf8
永久:
更改my.cnf用戶端模組參數,實現set names utf8的效果,並且永久生效。
[client]
default-character-set=latinl
提示,無需重啟服務,退出重新登陸,相當於 set names latinl
/etc/init.d/mysqld start
3、MySQL服務端
[mysqld]
default -character-set=utf8 5.1版本以及之前版本
character -set -server=usf8 5.5版本
4、MySQL庫表
create database oldboy_utf8 DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci;
CREATE TABLE ‘student‘(
‘id‘ int (4) NOT NULL AUTO_INCREMENT,
‘name‘ char(20) NOT NULL,
PRIMARY KEY (‘id‘)
)ENGINE=InnoDB AUTO_INCERMENT=10 DAFAULT CHARSET=utf8
5、
程式
簡體 UTF8
總結:
mysqldump.mysqlbinlog.mysql.mysqladmin
6、查看錶結構
desc 表名;
show columns from 表名;
describe 表名;
show create table 表名;
use information_schema
select * from columns where table_name=‘表名‘;
查看錶結構:
mysql> status;
mysql> select version();
mysql --help | grep Distrib
$ rpm -qa|grep mysql
查看錶狀態:
show create table Course\G
查看字元集:
mysql -uroot -p‘abc123,.‘ -e "SHOW CHARACTER SET;"
mysql -uroot -p‘abc123,.‘ -e "SHOW CHARACTER SET;"|egrep "gbk|utf8|latin1"awk‘{print $0}‘
{
永久修改字元集:
另一種情況,可以永久生效字元集,方法如下:
對於中文亂碼問題,需要設定mysql字元集:
用find命令尋找cnf檔案。記得不要去找my.cnf因為它不一定存在,而應該找*.cnf。
# find / -name ‘*.cnf‘
/usr/share/doc/MySQL-server-5.5.27/my-huge.cnf
/usr/share/doc/MySQL-server-5.5.27/my-large.cnf
/usr/share/doc/MySQL-server-5.5.27/my-medium.cnf
/usr/share/doc/MySQL-server-5.5.27/my-small.cnf
/usr/share/doc/MySQL-server-5.5.27/my-innodb-heavy-4G.cnf
/usr/share/doc/kpathsea-2007/kpathsea_defaults/texmf-kpathsea-defaults.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/etc/pki/tls/openssl.cnf
找到之後,複製一個出來
# cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
開啟my.cnf修改編碼
# vi /etc/my.cnf
mysql 5.5以下:
在[mysqld]下添加
default-character-set=utf8
在[client]下添加
default-character-set=utf8
mysql 5.5 改為:
[client]
character-set-server = utf8
[mysqld]
character-set-server = utf8
}
登陸時修改字元集:
mysql -uroot -p‘abc123,.‘ --default-character-set=latin1
檢查:
sed -n ‘18,19p‘ /etc/my.cnf
[client]
#default-character-set=utf8
#password = your_password
為什麼伺服器要重啟才會生效:
因為linux要把配置載入到記憶體才行
指定字元集建庫:
create database names DEFALUT CHARACTER SET UTF8 COLLATE utf8_general_ci;
指定字元集建表:
CREATE TABLE ‘student‘(
‘id‘ int (4) NOT NULL AUTO_INCREMENT,
‘name‘ char(20) NOT NULL,
PRIMARY KEY (‘id‘)
)ENGINE=InnoDB AUTO_INCERMENT=10 DAFAULT CHARSET=utf8
字元集要一致:
表
庫
/etv/my.cnf
[mysqld]服務端
[client]用戶端
Linux
/etc/sysconfig/i18n
開發程式
如何更改生產MySQL資料庫庫表字元集
對於已有的資料庫想修改字元集不能通過"alter adtabase character set*"或"alter table tablename character set*"
這兩個命令都不能更新已有記錄的字元集,只能更新新建立的表或者記錄
已經有記錄的字元集的調整,必須先將資料匯出,經過修改字元集後重新匯入後才能完成修改。
1、匯出表結構
mysqldump -uroot -p --default-character-set=latinl -d dbname>alltable.sql
--default-character-set=gbk 表示字元集進行串連 -d只導表結構
2、編輯alltable.sql將latin1改成GBK
3、確保資料庫不再更新,匯出所以資料
mysqldump -uroot -p --quick --no-create-info --extend-insert --default-character-set=latin1 dbname >alldata.sql
參數說明:
--quick:用於轉儲大的表,強制mysqldump從伺服器一次一行的檢索資料而不是檢索所有行,並輸出前CACHE到記憶體中
--no-create-info:不建立 CREATE TABLE語句--extend-insert:使用包括幾個VALUES列表的多行INSERT文法,這樣檔案更小,IO也小,匯入資料時會非常快。--default-character-set=latin1:#按照原有的字元集匯出資料,這樣匯出的檔案中,所有中文都是可見的,不會儲存成亂碼。
4、開啟alldata.sql將set names latin1 修改成set names gbk;
5、建庫
create database daname default charset gbk;
6、建立表,執行allable.sql
mysql -uroot -p dbaneme <alltable.sql
7、匯入資料:
mysql -uroot -p dbaneme <alldata.sql
注意:
選擇目標字元集時,要注意最好大於等於源字元集(字型檔更大),否則 可能會丟失不被支援的資料。
總結:
1、匯出表結構及建庫建表語句,sed批量更改
2、匯出所以資料
3、修改mysql服務端和用戶端編碼
4、刪除原有的庫表及資料
5、匯入新的建庫及建表語句
6、匯入mysql的所有資料
inser into Course (Cno,Cname,Tno)values(1,電腦,1);
MySQL字元集