mysql字符集修改 MySql字符集修改

2021-10-17 11:37:27 字數 2624 閱讀 4098

問題分析

普通的字串或者表情都是佔位3個位元組,所以utf8足夠用了,但是移動端的表情符號佔位是4個位元組,普通的utf8就不夠用了,為了應對無線網際網路的機遇和挑戰、避免 emoji 表情符號帶來的問題、涉及無線相關的 mysql 資料庫建議都提前採用 utf8mb4 字符集,這必須要作為移動網際網路行業的乙個技術選型的要點

mysql 版本的限制,mysql 5.5.3之前的版本,支援的utf8為3位元組的,mysql 5.5.3之後的版本支援utf8mb4

解決方案

首先我們看下哪些地方可能需要我們修改編碼:

庫(database)的編碼

表(table)的編碼

字段(column)的編碼

程式中,資料庫的連線url

mysql的配置檔案my.conf中

我們可以先查詢下當前資料庫的編碼資訊:

show variables like 'character_set_%'

variable_name

value

character_set_client

utf8

character_set_connection

utf8

character_set_database

utf8

character_set_filesystem

binary

character_set_results

utf8

character_set_server

utf8

character_set_system

utf8

character_sets_dir

/opt/install/mysql/share/charsets/

我們將庫的編碼修改

datebase charset=utf8mb4

datebase collation=utf8mb4_unicode_ci

將表的編碼修改

character set=utf8mb4

collation=utf8mb4_unicode_ci

將需要支援emoji表情欄位的編碼修改

charset=utf8mb4

collation=utf8mb4_unicode_ci

修改mysql的配置檔案my.conf

[client]

# 客戶端**資料的預設字符集

default-character-set = utf8mb4

[mysql]

# 資料庫預設字符集

default-character-set = utf8mb4

[mysqld]

# 服務端預設字符集

character-set-server=utf8mb4

# 連線層預設字符集

collation-server=utf8mb4_unicode_ci

修改完畢後,記得重新啟動mysql服務

/etc/init.d/mysql restart

variable_name

value

character_set_client

utf8mb4

character_set_connection

utf8mb4

character_set_database

utf8mb4

character_set_filesystem

binary

character_set_results

utf8mb4

character_set_server

utf8mb4

character_set_system

utf8

character_sets_dir

/opt/install/mysql/share/charsets/

實測:修改專案中的連線資料庫的url,將characterencoding=utf-8去掉,實測此步驟可以不用改變。

字符集知識擴充套件

字符集、連線字符集、排序字符集

utf8mb4對應的排序字符集有utf8mb4_unicode_ci、utf8mb4_general_ci.

utf8mb4_unicode_ci和utf8mb4_general_ci的對比:

準確性:

utf8mb4_unicode_ci是基於標準的unicode來排序和比較,能夠在各種語言之間精確排序

utf8mb4_general_ci沒有實現unicode排序規則,在遇到某些特殊語言或者字符集,排序結果可能不一致。

但是,在絕大多數情況下,這些特殊字元的順序並不需要那麼精確。

效能utf8mb4_general_ci在比較和排序的時候更快

utf8mb4_unicode_ci在特殊情況下,unicode排序規則為了能夠處理特殊字元的情況,實現了略微複雜的排序演算法。

但是在絕大多數情況下發,不會發生此類複雜比較。相比選擇哪一種collation,使用者更應該關心字符集與排序規則在db裡需要統一。

至於排序規則(collation) 選擇預設的 utf8mb4_general_ci,還是 utf8mb4_unicode_ci。 請參考stack overflow的這篇帖子。 討論結果從排序的準確性,以及效能方面,告訴我們應該選用 utf8mb4_unicode_ci。

mysql修改字符集

1,set names charset name set names顯示客戶端傳送的sql語句中使用什麼字符集。因此,set names utf8 語句告訴伺服器將來從這個客戶端傳來的資訊採用字符集utf8 它還為伺服器傳送回客戶端的結果指定了字符集。2 連線字符集和校對 1 一些字符集和校對規則系...

mysql 修改字符集

一 修改my.ini配置檔案 mysql配置檔案 character set server utf8 設定字符集 重啟mysql資料庫服務 檢視當前資料庫字符集 show variables like character 二 修改資料庫字符集 alter database 資料庫名 characte...

mysql 修改字符集

較好的常規辦法 建立制定字符集的資料庫 需求描述 在建立db的時候指定字符集.操作過程 1.使用create database語句建立資料庫 mysql create database if not exists test03 default character set utf8 query ok,...