mysql 插入中文亂碼解決方案 轉

來源:互聯網
上載者:User

轉自http://www.cnblogs.com/pricks

"

MySQL 4.1的字元集支援(Character Set Support)有兩個方面:字元集(Character set)和排序方式(Collation)。對於字元集的支援細化到四個層次: 伺服器(server),資料庫(database),資料表(table)和串連(connection)。下面將分兩部分,分別設定伺服器編碼和資料庫、資料表與串連部分的編碼,從而杜絕中文亂碼的出現。

  一 伺服器編碼設定

  伺服器編碼設定方法有二:

  一是安裝mysql時,其中會有一個步驟選擇編碼方式,此時選擇gbk即可。如果不選擇,預設的編碼是latin1;

  二是在安裝玩mysql之後,手動修改其設定檔,如下:

  (1)修改 MySql安裝目錄下面的my.ini(MySQL Server Instance Configuration 檔案)。 設定

        default-character-set=gbk(注意,有2處) 
  (2)修改data目錄中相應資料庫目錄下的db.opt設定檔        default-character-set=gbk        default-collation=gbk_chinese_ci   重啟資料庫,關閉控制台視窗重新登入資料庫即可。    二 資料庫、資料表和串連部分的編碼設定   2.1 設定資料庫和資料表編碼  要解決亂碼問題,首先必須弄清楚資料庫和資料表用什麼編碼。 如果沒有指明,將是預設的latin1。
用得最多的應該是這3種字元集 gb2312,gbk,utf8。
  如何去指定資料庫和資料表的字元集呢?下面也gbk為例:
  【在MySQL Command Line Client建立資料庫 】
  mysql> CREATE TABLE `mysqlcode` (
  -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  -> `content` VARCHAR( 255 ) NOT NULL
  -> )  TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
  Query OK, 0 rows affected, 1 warning (0.03 sec)
  其中後面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定資料庫的字元集,COLLATE (校勘),讓mysql同時支援多種編碼的資料庫。
  當然也可以通過如下指令修改資料庫資料表的字元集:
    alter database mysqlcode default character set 'gbk'.
  前面已經設定了伺服器、資料庫和資料表的編碼,那麼資料庫中的編碼便都是gbk,中文可以儲存進去。但是如果你要通過執行insert或select等操作時,仍然會出現中文亂碼問題,這是因為還沒設定“串連(connection)”部分的編碼,而insert、select等資料庫操作都包含與資料庫的串連動作。如果不信,你現在可以執行下面的sql文試一試:  mysql> insert into mysqlcode values(null,'java愛好者');
  按斷行符號,結果如下:  ERROR 1406 (22001): Data too long for column 'content' at row 1
     2.2 設定串連編碼  設定了伺服器、資料庫和資料表部分的編碼,必須設定串連編碼。串連編碼設定如下:  mysql> SET character_set_client='gbk';
  mysql> SET character_set_connection='gbk'
  mysql> SET character_set_results='gbk'
  設定好串連編碼,下面便可以成功插入中文了:  mysql> insert into mysqlcode values(null,'java愛好者');
  Query OK, 0 rows affected (0.02 sec)
    其實,上面設定串連編碼的三條命令可以簡化為一條:  mysql> set names 'gbk';    設定好了串連編碼後,在select查詢時,也能正確顯示中文:  mysql> select * from mysqlcode;
  +----+-----------+
  | id | content |
  +----+-----------+
  | 1   | java愛好著 |
  +----+-----------+
  1 row in set (0.00 sec)     三 完整樣本  下面將用一個例子完整地將上面的理論示範一遍,最後達到能向mysql中插入中文的目的:   3.1 設定mysql伺服器編碼  這一步請參見上文第一節,主要就是在安裝mysql之後,修改my.ini和dataTable.db中的編碼為gbk    3.2 建立一個資料庫  先串連到本機資料庫:mysql -h localhost -u root -proot,接著建立一個資料庫:  mysql> create database test;    3.3 建立資料表並設定其編碼  -- 中文編碼測試資料表  use test
  DROP TABLE IF EXISTS `test`.`test_nml`;
  SET @saved_cs_client = @@character_set_client;
  SET character_set_client = gbk;
  CREATE TABLE  `test`.`test_nml` (
    `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `content` VARCHAR( 255 ) NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='使用者基本資料';
  SET character_set_client = @saved_cs_client;  這裡的紅色部分等價於上文中的 TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;   3.4 插入中文資料  --插入資料
  SET @saved_cs_client = @@character_set_client;
  set names gbk;
  insert into test_nml values(null,'我是中文');    注意:每次執行insert或update或select串連操作時,都必須設定編碼,即在前面加上: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.