MySQL編碼不一致,為什麼還能顯示中文?

來源:互聯網
上載者:User

1)不是應該用相同的編碼才不會亂碼的嗎?
另外,資料庫的編碼是latin1不是不支援中文的嗎?為什麼我這裡能顯示中文?

2)還有一點不理解的是:我用set names utf8後,中文會亂碼;
用set names gbk 後,中文能正常顯示了,還是不太理解,為什麼utf8不能顯示中文?

3)我設定了set names gbk後,中文顯示沒有問題了。但關閉用戶端再開啟的時候,又必須再來一次set names gbk才能顯示中文,怎麼解決這個問題。

回複內容:

1)不是應該用相同的編碼才不會亂碼的嗎?
另外,資料庫的編碼是latin1不是不支援中文的嗎?為什麼我這裡能顯示中文?

2)還有一點不理解的是:我用set names utf8後,中文會亂碼;
用set names gbk 後,中文能正常顯示了,還是不太理解,為什麼utf8不能顯示中文?

3)我設定了set names gbk後,中文顯示沒有問題了。但關閉用戶端再開啟的時候,又必須再來一次set names gbk才能顯示中文,怎麼解決這個問題。

1、MySQL 的字元集支援有兩個方面:字元集(Character set)和排序方式(Collation)。對於字元集的支援細化到四個層次: 伺服器(server),資料庫(database),資料表(table)和串連(connection)。

2、Db characterset: 你對這個理解好像有些偏差,這個是指當前資料庫預設字元集, 請看下面例子。

CREATE DATABASE `db_test1` CHARACTER SET 'utf8'  COLLATE 'utf8_general_ci';use db_test1;status;Server characterset:    utf8Db     characterset:    utf8Client characterset:    utf8Conn.  characterset:    utf8----------------------------------------CREATE DATABASE `db_test2` CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';use db_test2;status;Server characterset:    utf8Db     characterset:    latin1Client characterset:    utf8Conn.  characterset:    utf8

3、Server characterset 是指你建立資料庫時如果不指定字元集時候使用的預設字元集。

4、Client characterset 是用戶端串連到mysql所用的字元集,也就是說是使用這種字元集和資料庫進行互動的。資料庫最終儲存的二進位,也就是說按照這個編碼把當前輸入的字元進行編碼成對應的二進位。可以在登入mysql指定。

mysql -uroot -p --default-character-set=latin1或set names latin1

現在已經指定字元集有好幾種,伺服器、用戶端、資料庫已經表等。 所以對於“對應編碼相同就不會亂碼”就需要重新理解一下,我的理解是:當用戶端和資料庫表所用的字元集一致就不會亂碼。注意:伺服器字元集可以使用utf-8、資料庫字元集可以用GBK,而最終的表也可以為utf8。

CREATE DATABASE `db_test1` CHARACTER SET 'utf8'  COLLATE 'utf8_general_ci';use db_test1;show create database db_test1;+----------+-------------------------------------------------------------------+| Database | Create Database                                                   |+----------+-------------------------------------------------------------------+| db_test1 | CREATE DATABASE `db_test1` /*!40100 DEFAULT CHARACTER SET utf8 */ |+----------+-------------------------------------------------------------------+create table test(name varchar(20)) default charset = latin1; show create table test;+-------+------------------------------------------------------------------------------------------------+| Table | Create Table                                                                                   |+-------+------------------------------------------------------------------------------------------------+| test  | CREATE TABLE `test` (  `name` varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 |+-------+------------------------------------------------------------------------------------------------+退出後重新連mysqlmysql db_test1 --default-character-set=latin1statusConnection id:          299Current database:       db_test1Current user:           root@localhostSSL:                    Not in useCurrent pager:          stdoutUsing outfile:          ''Using delimiter:        ;Server version:         5.6.23 MySQL Community Server (GPL)Protocol version:       10Connection:             Localhost via UNIX socketServer characterset:    utf8Db     characterset:    utf8Client characterset:    latin1Conn.  characterset:    latin1insert into test values('中文測試');select * from test;+--------------+| name         |+--------------+| 中文測試 |+--------------+可以看到這裡沒有看到亂碼。當使用命令set names 修改用戶端字元集的情況mysql> set names utf8;Query OK, 0 rows affected (0.00 sec)mysql> select * from test;+------------------------------+| name                         |+------------------------------+| 䏿–‡æµ‹è¯• |+------------------------------+1 row in set (0.00 sec)mysql> set names gbk;Query OK, 0 rows affected (0.00 sec)mysql> select * from test;+----------------+| name           |+----------------+| ???????? |+----------------+1 row in set (0.00 sec)

因為 windows 下的 cmd 不支援 utf8 編碼,所以使用 utf8 編碼會亂碼。

因為是在windows下,所以set names gbk顯示正常
Server characterset: utf8Db characterset: utf8Client characterset: utf8Conn. characterset: utf8
這樣就不用每次set names gbk

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.