乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      徹底解決mysql中文亂碼

       wwq圖書世界 2019-08-16

      mysql是我們項目中非常常用的數(shù)據(jù)型數(shù)據(jù)庫。但是因為我們需要在數(shù)據(jù)庫保存中文字符,所以經(jīng)常遇到數(shù)據(jù)庫亂碼情況。下面就來介紹一下如何徹底解決數(shù)據(jù)庫中文亂碼情況。

      1、中文亂碼

      1.1、中文亂碼

       create table user(name varchar(11));    # 創(chuàng)建user表
       insert into table user("carl");         # 添加數(shù)據(jù)
       select * from user;

      這里寫圖片描述

      insert into user value("哈哈");

      無法插入中文字符:

      這里寫圖片描述

      1.2、查看表字符編碼

      mysql> show create table user \G;
      *************************** 1. row ***************************
             Table: user
      Create Table: CREATE TABLE `user` (
        `name` varchar(11) DEFAULT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1
      1 row in set (0.00 sec)

      我們可以看到表的默認字符集是latin1.
      所以我們在創(chuàng)建表的時候就需要指定表的字符集:

       create table user(name varchar(11)) default charset=utf8; 

      這樣在Linux里面可以訪問并且可以插入與訪問這個表了。

      這里寫圖片描述

      1.3、數(shù)據(jù)庫與操作系統(tǒng)編碼

      雖然在服務器端可以顯示中文正常,但是在客戶端可能會顯示亂碼。因為我們的服務器是UTF8。

      這里寫圖片描述

      而且數(shù)據(jù)庫的編碼也存在問題。

      這里寫圖片描述

      這里我們可以看character_sert_database與character_set_server的字符集都是latin1.那么在mysql數(shù)據(jù)庫中,server,database,table的字符集都默認是latin1.下面我們就來看看如何解決mysql亂碼情況。

      2、mysql設置變量的范圍

      2.1、session范圍

      查看數(shù)據(jù)庫編碼:

      show variables like '%char%';

      這里寫圖片描述

      修改字符編碼:

      set character_set_server=utf8;
      set character_set_database=utf8;
      show variables like '%char%';

      這里寫圖片描述
      我們可以看到字符集已經(jīng)修改成都是utf8了。但是這里有一個問題,那就是我們重新打開一個命令窗口然后查看數(shù)據(jù)編碼就會出現(xiàn)下面的畫面:

      這里寫圖片描述

      2.2、global范圍

      mysql設置變量的范圍默認是session范圍。如果設置多個會話的字符集那么需要設置global范圍:Set [global|session] variables …

      set global character_set_database=utf8;
      set global character_set_server=utf8;
      show variables like '%char%';

      當我們跨會話查看mysql字符集都會看到都是utf8。如果你以為萬事大吉了的話,那么你就大錯特錯了。

      2.3、設置數(shù)據(jù)全局范圍

      當我們數(shù)據(jù)庫重啟的時候,你們發(fā)現(xiàn)設置global范圍的值又變成latin1了。

      service mysqld restart
      mysql -uroot -pyourpassword
      show variables like '%char%';

      這里寫圖片描述

      不要怕,下面就教你終極大招:

      修改mysql配置文件/etc/my.cnf。

      [mysqld]
      character-set-server=utf8 
      [client]
      default-character-set=utf8 
      [mysql]
      default-character-set=utf8

      請注意這幾個參數(shù)配置的位置,不然可能會啟動不起來mysql服務:

      這里寫圖片描述

      OK。這下如果你重啟mysql服務也會發(fā)現(xiàn)它的字符集是utf8.

      這里寫圖片描述

      而且我們創(chuàng)建表的時候不需要指定字符編碼,它默認就是utf8;

      drop database test;
      create database test;
      use test;
      create table user(name varchar(11));
      show create table user \G;

      這里寫圖片描述

      3、總結(jié)

      我看網(wǎng)上很多答案都是直接在session級別設置mysql的字符編碼,這是治標不治本的方法。我們還是要從源頭上解決這個問題。那就是修改mysql默認的配置文件,把它的字符集修改成能夠使用中文字符的UTF8就OK了。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多