標籤:mysql 資料庫 亂碼 字元編碼
mysql> create database wsyht_latin1 default character set latin1; #建立為拉丁字元
mysql> use wsyht_latin1
mysql> create table t1(id int,age int(3),name char(10));
mysql> insert into t1 values(1,25,‘wsyht‘),(2,26,‘peter‘);
mysql>
mysql> select *from t1;
+------+------+-------+
| id | age | name |
+------+------+-------+
| 1 | 25 | wsyht |
| 2 | 26 | peter |
+------+------+-------+
2 rows in set (0.00 sec)
mysql> insert into t1 values (3,‘27‘,‘張三‘);
mysql> select *from t1;
+------+------+-------+
| id | age | name |
+------+------+-------+
| 1 | 25 | wsyht |
| 2 | 26 | peter |
| 3 | 27 | ?? |
+------+------+-------+
3 rows in set (0.00 sec)
mysql> set names latin1; #臨時set name設定系統及庫表的字元集,臨時修改
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t1 values (3,‘27‘,‘李四‘);
Query OK, 1 row affected (0.00 sec)
mysql> select *from t1;
+------+------+--------+
| id | age | name |
+------+------+--------+
| 1 | 25 | wsyht |
| 2 | 26 | peter |
| 3 | 27 | ?? |
| 3 | 27 | 李四 |
+------+------+--------+
4 rows in set (0.00 sec)
法2
[[email protected] mnt]# cat test.sql #先set,再執行sql語句,臨時修改
set names latin1;
insert into t1 values (8,‘29‘,‘楊工‘);
mysql> source /mnt/test.sql
Query OK, 1 row affected (0.00 sec)
mysql> select *from t1;
+------+------+--------+
| id | age | name |
+------+------+--------+
| 1 | 25 | wsyht |
| 2 | 26 | peter |
| 3 | 27 | ?? |
| 3 | 27 | 李四 |
| 3 | 28 | 王五 |
| 8 | 29 | 楊工 |
+------+------+--------+
8 rows in set (0.00 sec)
法3:
[[email protected] mnt]# cat test.sql
set names latin1;
insert into t1 values (7,‘28‘,‘朱六‘);
[[email protected] mnt]# mysql -uroot -pwsyht123 wsyht_latin1 < test.sql
mysql> select *from t1;
+------+------+--------+
| id | age | name |
+------+------+--------+
| 1 | 25 | wsyht |
| 2 | 26 | peter |
| 3 | 27 | ?? |
| 3 | 27 | 李四 |
| 3 | 28 | 王五 |
| 7 | 28 | 朱六 |
| 8 | 29 | 楊工 |
+------+------+--------+
8 rows in set (0.00 sec)
法4:
[[email protected] mnt]# cat test.sql
insert into t1 values (4,‘28‘,‘王五‘);
[[email protected] mnt]# mysql -uroot -pwsyht123 --default-character-set=latin1 wsyht_latin1 < /mnt/test.sql
mysql> select *from t1;
+------+------+--------+
| id | age | name |
+------+------+--------+
| 1 | 25 | wsyht |
| 2 | 26 | peter |
| 3 | 27 | ?? |
| 3 | 27 | 李四 |
| 3 | 27 | 張三 |
+------+------+--------+
6 rows in set (0.00 sec)
法5:
臨時:
set names latin1
永久:
更改my.cnf用戶端模組的參數,可以實現set names latin1的效果,並且永久生效
1)更改用戶端的方法
[client]
default-character-set=latin1
提示:無需重啟服務,退出重新登陸就生效,相當於set name latin1;
2)更改服務端的方法
[mysqld]
default-character-set=utf8 適合5.1及以前版本
character-set-server=utf8 適合5.5
提示:需要重啟
查看當前MySQL支援的字元集
mysql -uroot -pwsyht -e "show character set;"
mysql -uroot -pwsyht123 -e "show character set;"|egrep "gbk|utf8|latin1"
庫表
create database wsyht default character set uft8 collate utf8_general_ci;
不亂碼的思想:建議中英文選擇utf-8
linux
[[email protected] mnt]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
set name latin1
總結:lain1->uft8
1、建表的語句和資料匯出,sed批量修改為utf8
mysqldump -uroot -pwsyht123 test > t1.sql #匯出test資料庫所有資料包括表結構
2、修改Mysql服務端和客服端編碼為utf8
vim t1.sql
:%s/latin1/utf8/gc
:wq
3、刪除原有的庫表及資料
drop database test
4、匯入建立庫及建表的語句
mysql -uroot -pwsyht123 test < t1.sql
希望一起交流技術的可以通過以下方式聯絡我
我的營運群517751492
我的QQ1934844044
本文出自 “wsyht的部落格” 部落格,請務必保留此出處http://wsyht2015.blog.51cto.com/9014030/1717695
MySQL資料庫亂碼解決辦法