- 論壇徽章:
- 0
|
mysql> show variables like '%character%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
客戶端使用CRT,
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| tpcc |
+--------------------+
5 rows in set (0.00 sec)
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1 |
| test2 |
+----------------+
2 rows in set (0.00 sec)
mysql> select * from test1;
Empty set (0.01 sec)
mysql> desc test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(2) | NO | PRI | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into test1 values(1,'測試'),(2,'測試2'),(3,'測試3');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | 測試 |
| 2 | 測試2 |
| 3 | 測試3 |
+----+---------+
3 rows in set (0.00 sec)
(1)客戶端工具utf8,client,connection,results 字符集為gbk
mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%character%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
mysql> select * from test1;
+----+-------+
| id | name |
+----+-------+
| 1 | |
| 2 | 2 |
| 3 | 3 |
+----+-------+
3 rows in set (0.01 sec)
結(jié)論出現(xiàn)錯(cuò)誤,但是沒有亂碼,應(yīng)該是客戶端工具不能識(shí)別,修改工具編碼格式gb2312后如下
mysql> select * from test1;
+----+-------+
| id | name |
+----+-------+
| 1 | 測試 |
| 2 | 測試2 |
| 3 | 測試3 |
+----+-------+
3 rows in set (0.00 sec)
插入幾筆
mysql> insert into test1 values (4,'浴4');
Query OK, 1 row affected (0.01 sec)
mysql> select * from test1;
+----+-------+
| id | name |
+----+-------+
| 1 | 測試 |
| 2 | 測試2 |
| 3 | 測試3 |
| 4 | 浴4 |
+----+-------+
4 rows in set (0.00 sec)
修改客戶端工具編碼
mysql> select * from test1;
+----+-------+
| id | name |
+----+-------+
| 1 | |
| 2 | 2 |
| 3 | 3 |
| 4 | ?4 |
+----+-------+
4 rows in set (0.00 sec)
出現(xiàn)亂碼
修改client,connection,results字符集為utf8
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | 測試 |
| 2 | 測試2 |
| 3 | 測試3 |
| 4 | 浴4 |
+----+---------+
4 rows in set (0.00 sec)
正常。
(2)修改client gbk
mysql> show variables like '%character%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | gbk |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | 測試 |
| 2 | 測試2 |
| 3 | 測試3 |
| 4 | 浴4 |
+----+---------+
4 rows in set (0.00 sec)
mysql> insert into test1 values (5,'測試5');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test1;
+----+------------+
| id | name |
+----+------------+
| 1 | 測試 |
| 2 | 測試2 |
| 3 | 測試3 |
| 4 | 浴4 |
| 5 | 嫻嬭瘯5 |
+----+------------+
5 rows in set (0.00 sec)
出現(xiàn)亂碼,過程,首先經(jīng)過client的gbk編碼經(jīng)過,connection進(jìn)入數(shù)據(jù)庫,因?yàn)閏onnection是utf8編碼,所以需要轉(zhuǎn)換,因?yàn)閡tf8是3字節(jié)編碼,轉(zhuǎn)換后,進(jìn)入數(shù)據(jù)庫,查詢的時(shí)候經(jīng)過connection傳出客戶端顯示,因?yàn)閞esults是utf8,所以無法正常轉(zhuǎn)出。
接著修改results為gbk
mysql> set character_set_results=gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | |
| 2 | 2 |
| 3 | 3 |
| 4 | ?4 |
| 5 | 測試5 |
+----+---------+
5 rows in set (0.00 sec)
第五個(gè)結(jié)果正常,因?yàn)榻?jīng)過connection 到results需要從utf8轉(zhuǎn)換成gbk,可以正常顯示。
特例,超過3字節(jié)
mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test1 values (6,'測試長字符經(jīng)過');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test1;
+----+--------------------------------+
| id | name |
+----+--------------------------------+
| 1 | 測試 |
| 2 | 測試2 |
| 3 | 測試3 |
| 4 | 浴4 |
| 5 | 嫻嬭瘯5 |
| 6 | 嫻嬭瘯闀垮瓧絎︾粡榪 |
+----+--------------------------------+
6 rows in set (0.00 sec)
mysql> set character_set_results=gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test1;
+----+----------------------+
| id | name |
+----+----------------------+
| 1 | |
| 2 | 2 |
| 3 | 3 |
| 4 | ?4 |
| 5 | 測試5 |
| 6 | 測試長字符經(jīng) |
+----+----------------------+
6 rows in set (0.00 sec)
結(jié)論:第六個(gè)已經(jīng)少了一個(gè)漢字
因?yàn)榻?jīng)過connection utf8到results gbk的轉(zhuǎn)換是,從3字節(jié)到2字節(jié),會(huì)丟失一部分?jǐn)?shù)據(jù),因此不完整了。
總結(jié):client ,connection,results需要一致,才能保證輸入和輸出完整。
盡量這3個(gè)值和服務(wù)器系統(tǒng)編碼一致。
有不正確和需要補(bǔ)充的,請大家指出,謝謝! |
|