如何修改MySQL字符集

  首先,MySQL的字符集問題主要是兩個概念,一個是Character Sets,一個是Collations,前者是字符內容
及編碼,後者是對前者進行比較操做的一些規則。這兩個參數集能夠在數據庫實例、單個數據庫、表、列等四個級
指定。
mysql

  對於使用者來講,通常推薦使用utf8編碼來存儲數據。而要解決亂碼問題,不僅僅是MySQL數據的存儲問題,還
和用戶的程序文件的編碼方式、用戶程序和MySQL數據庫的鏈接方式都有關係。


首先,MySQL有默認的字符集,這個是安裝的時候肯定的,在編譯MySQL的時候能夠經過DEFAULT_CHARSET=
utf8和DEFAULT_COLLATION=utf8_general_ci這兩個參數(MySQL5.5版本,5.1版本用--with-charset=
utf8 --with-collation=utf8_general_ci)來指定默認的字符集爲utf8,這也是最一勞永逸的辦法,這樣指定後,
客戶端鏈接到數據庫的編碼方式也默認是utf8了,應用程序不須要任何處理。


  可是遺憾的是,不少人編譯安裝MySQL的時候沒有指定這兩個參數,大多數人更是經過二進制程序的方式安裝,那
麼這時候MySQL的默認字符集是latin1。而這時候咱們仍然能夠指定MySQL的默認字符集,經過my.cnf文件增長
兩個參數:
1.在[mysqld]下添加
  default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8)
2.在[client]下添加
  default-character-set=utf8
這樣咱們建數據庫建表的時候就不用特別指定utf8的字符集了。配置文件裏的這種寫法解決了數據存儲和比較的問題
,可是對客戶端的鏈接是沒有做用的,客戶端這時候通常須要指定utf8方式鏈接才能避免亂碼。也就是傳說總的set
 names命令。
事實上,set names utf8命令對應的是服務器端如下幾個命令:
  SET character_set_client = utf8;
  SET character_set_results = utf8;
  SET character_set_connection = utf8;
  但這三個參數是不能寫在配置文件my.cnf裏的。只能經過set命令來動態修改。咱們須要的是在配置文件裏寫好一勞
永逸的辦法。
那麼這時候,是否有在服務端解決問題的辦法呢,可行的思路是在init_connect裏設置。這個命令在每
個普通用戶鏈接上來的時候都會觸發執行,能夠在[mysqld]部分增長如下一行設置鏈接字符集:
在[mysqld]下添加:
  init_connect = 'SET NAMES utf8'
總結:
一、首選在編譯安裝MySQL的時候指定兩個參數使用utf8編碼。
二、次選在配置文件my.cnf或my.ini設定兩個參數,同時設置init_connect參數。
三、第三在配置文件my.cnf或my.ini設定兩個參數,同時客戶端的鏈接指定set names命令。
四、在配置文件my.cnf裏的client和server處加入default-character-set參數方便管理。
linux

 

 1 -------客戶端----
 2 [client]
 3 no-beep  4 
 5 # pipe
 6 # socket=mysql  7 port=3306
 8 
 9 [mysql]
10 
11 default-character-set=gb2312 12 
13 -----服務器----
14 
15 # The default character set that will be used when a new schema or table is
16 # created and no character set is defined 17 character-set-server=gb2312
更改my.ini文件client、server的字符集

1.service mysqld stop,停用mysql。web

2.cp /etc/my.cnf /etc/my.cnf.bak,修改前作備份,這是個好習慣。sql

修改my.cnf或my.ini(只有修改配置文件,並重啓服務器,才能永久生效)
vi /etc/my.cnf

在[client]下添加,client爲控制客戶端的,沒試過,沒有的能夠不須要加。
default-character-set=utf8
在[mysqld]下添加,mysqld爲控制服務器端的,改過了,OK。
default-character-set=utf8數據庫

3.service mysqld restart,重啓。ubuntu

4.show variables like '%char%';查看。windows

 

如下爲網絡轉載,比較全。服務器

//////////////////////////////////////////網絡

查看mysql字符集MySQL 亂碼的根源是的 MySQL 字符 app

ubuntu 10.04 mySql 啓動,中止,重啓

啓動:sudo /etc/init.d/mysql start
中止:sudo /etc/init.d/mysql stop
重啓:sudo /etc/init.d/mysql restart

  注意:從windows下拷貝過來的文件在linux下不能直接加入數據庫,由於字符集不同,這樣打開即便顯示是中文也不能在數據庫中顯示,要把文件拷貝進linux的另外一個文件中轉換字符才能夠。

  MySQL 亂碼的根源是的 MySQL 字符集設置不當的問題,本文彙總了有關查看 MySQL 字符集的命令。包括查看 MySQL 數據庫服務器字符集、查看 MySQL 數據庫字符集,以及數據表和字段的字符集、當前安裝的 MySQL 所支持的字符集等。

1、查看 MySQL 數據庫服務器和數據庫字符集。

 mysql> show variables like '%char%';

2、查看 MySQL 數據表(table) 的字符集。

 mysql> show table status from sqlstudy_db like '%countries%';

3、查看 MySQL 數據列(column)的字符集。

 mysql> show full columns from countries;

4、查看當前安裝的 MySQL 所支持的字符集。

  mysql> show charset;

  mysql> show char set;

以上查看 MySQL 字符集命令,適用於 Windows & Linux。 
 

1.查找MySQL的cnf文件的位置
  find / -iname '*.cnf' -print

  /usr/share/mysql/my-innodb-heavy-4G.cnf

  /usr/share/mysql/my-large.cnf
  /usr/share/mysql/my-small.cnf
  /usr/share/mysql/my-medium.cnf
  /usr/share/mysql/my-huge.cnf
  /usr/share/texmf/web2c/texmf.cnf
  /usr/share/texmf/web2c/mktex.cnf
  /usr/share/texmf/web2c/fmtutil.cnf
  /usr/share/texmf/tex/xmltex/xmltexfmtutil.cnf
  /usr/share/texmf/tex/jadetex/jadefmtutil.cnf
  /usr/share/doc/MySQL-server-community-5.1.22/my-innodb-heavy-4G.cnf
  /usr/share/doc/MySQL-server-community-5.1.22/my-large.cnf
  /usr/share/doc/MySQL-server-community-5.1.22/my-small.cnf
  /usr/share/doc/MySQL-server-community-5.1.22/my-medium.cnf
  /usr/share/doc/MySQL-server-community-5.1.22/my-huge.cnf

2.
拷貝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf其中的一個到/etc下,命名爲my.cnf
  cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

3. 修改my.cnf 或my.ini(5.6版本)
vi /etc/my.cnf
在[client]下添加
  default-character-set=utf8
在[mysqld]下添加
  default-character-set=utf8

4.從新啓動MySQL

  [root@bogon ~]# /etc/rc.d/init.d/mysql restart
  Shutting down MySQL                                         [ 肯定 ]
  Starting MySQL.                                             [ 肯定 ]
  [root@bogon ~]# mysql -u root -p
  Enter password:
  Welcome to the MySQL monitor. Commands end with ; or \g.
  Your MySQL connection id is 1
  Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL)
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


其餘的一些設置方法:

如 經過配置文件修改:

修改/var/lib/mysql/mydb/db.opt
  default-character-set=latin1
  default-collation=latin1_swedish_ci

  default-character-set=utf8
  default-collation=utf8_general_ci
重起MySQL:
  [root@bogon ~]# /etc/rc.d/init.d/mysql restart

經過MySQL命令行修改:

1 mysql> set character_set_client=utf8; 2 mysql> set character_set_connection=utf8; 3 mysql> set character_set_database=utf8; 4 mysql> set character_set_results=utf8; 5 mysql> set character_set_server=utf8; 6 mysql> set character_set_system=utf8; 7 mysql> set collation_connection=utf8; 8 mysql> set collation_database=utf8; 9 mysql> set collation_server=utf8;
更改客戶端、服務器、數據庫字符集的命令

 

1 show variables like 'collation_%'; 2 show variables like 'character_set_%';
1.查看字符集

 

1 ---1.修改數據庫字符集
2 alter database mini default character set = gb2312; 3 ----2.建立數據庫設置字符集
4 create database mydb character set gb2312;
設置數據庫字符集

 

1 alter table pub_logs default character set = gb2312; 2 alter table pub_logs convert to character set gb2312;
3.修改單個表字符集

 

1 SELECT a.TABLE_TYPE,CONCAT('alter TABLE ',A.TABLE_NAME,' default character set = gb2312;')  FROM INFORMATION_SCHEMA.TABLES A 2 WHERE A.TABLE_SCHEMA='MINI'
3 AND a.TABLE_TYPE='BASE TABLE'
4 ;
4.生成批量更改表字符集

 

1 SELECT CONCAT(CONCAT(CONCAT('alter TABLE ',c.TABLE_NAME,' modify'),CONCAT(' ',C.COLUMN_NAME,' '),C.COLUMN_TYPE),' ',' character set gb2312 COLLATE gb2312_chinese_ci;') AS CLOU 2 FROM 
3 INFORMATION_SCHEMA.COLUMNS C,INFORMATION_SCHEMA.TABLES A 4 WHERE c.TABLE_SCHEMA='MINI'
5   AND A.TABLE_NAME=c.TABLE_NAME 6   AND A.TABLE_TYPE='BASE TABLE'
7   AND c.DATA_TYPE='varchar'
8   ;
5.生成批量更改列字符集
相關文章
相關標籤/搜索