ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latinlmysql
source test.sqllinux
root# mysql -uroot -p'' oldboy < test.sqlsql
default -charact-set=latinl數據庫
不亂碼的思想:Linux,客戶端,服務器,庫,表,程序!
一、linux系統
root# cat /etc/sysconfig/i18n
#LANG="zh_CN.GB2312"服務器
二、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 startui
三、MySQL服務端
[mysqld]
default -character-set=utf8 5.1版本以及以前版本
character -set -server=usf8 5.5版本編碼
四、MySQL庫表
create database oldboy_utf8 DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci;orm
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=utf8server
五、內存
程序
簡體 UTF8
總結:
mysqldump.mysqlbinlog.mysql.mysqladmin
六、查看錶結構
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*" 這兩個命令都不能更新已有記錄的字符集,只能更新新建立的表或者記錄 已經有記錄的字符集的調整,必須先將數據導出,通過修改字符集後從新導入後才能完成修改。 一、導出表結構 mysqldump -uroot -p --default-character-set=latinl -d dbname>alltable.sql --default-character-set=gbk 表示字符集進行鏈接 -d只導表結構 二、編輯alltable.sql將latin1改爲GBK 三、確保數據庫再也不更新,導出因此數據 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:#按照原有的字符集導出數據,這樣導出的文件中,全部中文都是可見的,不會保存成亂碼。 四、打開alldata.sql將set names latin1 修改爲set names gbk; 五、建庫 create database daname default charset gbk; 六、建立表,執行allable.sql mysql -uroot -p dbaneme <alltable.sql 七、導入數據: mysql -uroot -p dbaneme <alldata.sql 注意: 選擇目標字符集時,要注意最好大於等於源字符集(字庫更大),不然 可能會丟失不被支持的數據。 總結: 一、導出表結構及建庫建表語句,sed批量更改 二、導出因此數據 三、修改mysql服務端和客戶端編碼 四、刪除原有的庫表及數據 五、導入新的建庫及建表語句 六、導入mysql的全部數據inser into Course (Cno,Cname,Tno)values(1,計算機,1);