中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL 5.5 更改默認字符集

發布時間:2020-07-17 04:53:04 來源:網絡 閱讀:427 作者:crazy_charles 欄目:數據庫

首先,MySQL的字符集問題主要是兩個概念,

一個是Character Sets,

一個是Collations,

前者是字符內容及編碼,后者是對前者進行比較操作的一些規則。這兩個參數集可以在數據庫實例、單個數據庫、表、列等四個級別指定。


對于使用者來說,一般推薦使用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方式連接才能避免亂碼。也就是傳說總的setnames命令。事實上,set names utf8命令對應的是服務器端以下幾個命令:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = xutf8;

但這三個參數是不能寫在配置文件my.cnf里的。只能通過set命令來動態修改。我們需要的是在配置文件里寫好一勞

永逸的辦法。那么這時候,是否有在服務端解決問題的辦法呢,可行的思路是在init_connect里設置。這個命令在每個普通用戶連接上來的時候都會觸發執行,可以在[mysqld]部分增加以下一行設置連接字符集:

[mysqld]下添加:

init_connect = 'SET NAMES utf8'

這樣就簡單的解決了問題,但是要注意的是,這個命令對具有super權限的用戶是不生效的,可以簡單的測試如下:


[root@localhost init.d]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.1.49-log MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

This software comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like '%collation%';

+----------------------+-------------------+

| Variable_name        | Value             |

+----------------------+-------------------+

| collation_connection | latin1_swedish_ci |

| collation_database   | utf8_general_ci   |

| collation_server     | utf8_general_ci   |

+----------------------+-------------------+

3 rows in set (0.00 sec)

mysql> show variables like '%character%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | latin1                     |

| character_set_connection | latin1                     |

| character_set_database   | utf8                       |

| character_set_filesystem | binary                     |

| character_set_results    | latin1                     |

| character_set_server     | utf8                       |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.00 sec)

我們看到root用戶看到的connection相關參數仍然是latin1,而普通用戶看到的卻是utf8。

實際上,對于mysql,mysqladmin, mysqlcheck, mysqlimport和mysqlshow這些客戶端命令程序,可以設置以下參數在配置文件的

[client]部分,為這些程序指定默認用utf8編碼和連接:

default-character-set = utf8

網上很多資料(包括一些大公司的所謂牛人)說加上這一行就能徹底解決亂碼問題,這是不正確的,這個參數只對以上幾個官方的客戶端程序有用,對普通的第三方程序,比如php代碼是無效的。

當然,這個參數可以方便DBA的管理,還是很有用的,而這個參數也能解釋為什么DBA看到的內容和普通用戶看到的內容有時會有差異。

除了數據庫的存儲,連接數據庫的方式,還有就是程序本身的編碼也要是utf8方式來保存,當然這與MySQL數據庫已經無關了,而是客戶端顯示的問題。


總結一下就是:

1、首選在編譯安裝MySQL的時候指定兩個參數使用utf8編碼。

2、次選在配置文件my.cnf設定兩個參數,同時設置init_connect參數。

3、第三在配置文件my.cnf設定兩個參數,同時客戶端的連接指定set names命令。

4、在配置文件my.cnf里加入default-character-set參數方便管理。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广西| 崇礼县| 攀枝花市| 陆良县| 德昌县| 镇康县| 永胜县| 台山市| 鹰潭市| 阜宁县| 平安县| 梁河县| 砀山县| 和田县| 井冈山市| 伊春市| 万盛区| 宣化县| 贡山| 海盐县| 望城县| 通城县| 天峻县| 固阳县| 湘潭县| 寻乌县| 将乐县| 江阴市| 阿拉善右旗| 舒城县| 朔州市| 临西县| 柳林县| 家居| 广汉市| 永顺县| 铅山县| 朝阳区| 宜章县| 科尔| 峡江县|