一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_ci

MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_ci

2021-01-18 14:48kikajack Mysql

這篇文章主要介紹了MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_ci的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

參考:mysql字符集小結

utf8mb4 已成為 MySQL 8.0 的默認字符集,在MySQL 8.0.1及更高版本中將 utf8mb4_0900_ai_ci 作為默認排序規則。

新項目只考慮 utf8mb4

UTF-8 編碼是一種變長的編碼機制,可以用1~4個字節存儲字符。

因為歷史遺留問題,MySQL 中的 utf8 編碼并不是真正的 UTF-8,而是閹割版的,最長只有3個字節。當遇到占4個字節的 UTF-8 編碼,例如 emoji 字符或者復雜的漢字,會導致存儲異常。

從 5.5.3 開始,MySQL 開始用 utf8mb4 編碼來實現完整的 UTF-8,其中 mb4 表示 most bytes 4,最多占用4個字節。從 8.0 之后,將會在某個版本開始用 utf8mb4 作為默認字符編碼。

設置服務器默認字符集為 utf8mb4

創建數據庫時,如果沒有指定字符集,會采用服務器的默認字符集。設置服務器默認字符集為 utf8mb4 可以提高便利性。

編輯 MySQL 的配置文件

只需要關心5個系統變量,這5個都改為 utf8mb4 則修改成功:
character_set_client
character_set_connection
character_set_results
character_set_server
character_set_database

my.cnf 是MySQL 的配置文件,修改之前記得先備份:

vi /etc/my.cnf

在[mysqld]下面加上default-character-set=utf8后服務器啟動不了,莫名其妙。后來這么改就好了(MySQL5.7):

?
1
2
3
4
5
6
7
8
9
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
...
[client]
default-character-set=utf8mb4

MySQL8.0 默認已經是 utf8mb4,不用改懂。如果你要改的話,配置文件如下:

?
1
2
3
4
5
6
7
8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server = utf8mb4
[client]
default-character-set=utf8mb4

重啟并確認

可以看到,系統編碼、連接編碼、服務器和客戶端編碼都設置為 UTF-8了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> show variables like "%char%";
+--------------------------------------+--------------------------------+
| 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          | /usr/share/mysql-8.0/charsets/ |
| validate_password.special_char_count | 1               |
+--------------------------------------+--------------------------------+
9 rows in set (0.00 sec)

MySQL 中字符集相關變量

character_set_client:客戶端請求數據的字符集
character_set_connection:從客戶端接收到數據,然后傳輸的字符集
character_set_database:默認數據庫的字符集,無論默認數據庫如何改變,都是這個字符集;如果沒有默認數據庫,那就使用 character_set_server指定的字符集,這個變量建議由系統自己管理,不要人為定義。
character_set_filesystem:把操作系統上的文件名轉化成此字符集,即把 character_set_client轉換character_set_filesystem, 默認binary是不做任何轉換的
character_set_results:結果集的字符集
character_set_server:數據庫服務器的默認字符集
character_set_system:存儲系統元數據的字符集,總是 utf8,不需要設置

創建數據庫時指定字符集為 utf8mb4

如果數據庫默認字符集不是 utf8mb4,那么可以在創建數據庫時指定字符集:

?
1
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

排序字符集 collation

字符除了需要存儲,還需要排序或比較大小。推薦用 utf8mb4_unicode_ci,但是用 utf8mb4_general_ci 也沒啥問題。

MySQL 8.0 默認的是 utf8mb4_0900_ai_ci,屬于 utf8mb4_unicode_ci 中的一種,具體含義如下:

  • uft8mb4 表示用 UTF-8 編碼方案,每個字符最多占4個字節。
  • 0900 指的是 Unicode 校對算法版本。(Unicode歸類算法是用于比較符合Unicode標準要求的兩個Unicode字符串的方法)。
  • ai指的是口音不敏感。也就是說,排序時e,è,é,ê和ë之間沒有區別。
  • ci表示不區分大小寫。也就是說,排序時p和P之間沒有區別。

utf8mb4 已成為默認字符集,在MySQL 8.0.1及更高版本中將utf8mb4_0900_ai_ci作為默認排序規則。以前,utf8mb4_general_ci是默認排序規則。由于utf8mb4_0900_ai_ci排序規則現在是默認排序規則,因此默認情況下新表格可以存儲基本多語言平面之外的字符?,F在可以默認存儲表情符號。如果需要重音靈敏度和區分大小寫,則可以使用utf8mb4_0900_as_cs代替。

總結

到此這篇關于MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_ci的文章就介紹到這了,更多相關mysql 編碼 utf8 與 utf8mb4內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/kikajack/article/details/84668924

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品久久久久69影院 | 色综合久久中文字幕综合网 | 青青草原国产一区二区 | sss在线播放 | 国产馆在线观看免费的 | 亚洲精品国产专区91在线 | 国产成人精品一区二三区2022 | 乌克兰一级毛片9一18 | 欧美亚洲第一区 | 爱情岛论坛亚洲一号路线 | 亚洲 欧美 国产 综合首页 | 办公室里被迫高h | 精品国产免费久久久久久 | 亚洲 国产精品 日韩 | 精品一区二区三区波多野结衣 | 久久sese| 国产欧美日韩综合二区三区 | 香蕉人人超人人超碰超国产 | 国产专区日韩精品欧美色 | 日本黄色大片网站 | 亚洲国产精品嫩草影院久久 | 国产裸舞福利资源在线视频 | 青苹果乐园影院免费观看完整版 | eeuss18影院www国产 | 久久re热在线视频精69 | 乌克兰粉嫩摘花第一次 | 亚洲AV久久久久久久无码 | 青青草原伊人网 | 韩剧在线观看 | 天天快乐在线观看 | 免费观看一级特黄三大片视频 | 含羞草国产亚洲精品岁国产精品 | 500福利第一导航 | jk制服白丝超短裙流白浆 | 午夜神器老司机高清无码 | 暖暖视频免费观看视频中国.韩剧 | 91亚洲精品国产自在现线 | 91啦在线视频| 好吊色永久免费视频大全 | 亚洲 欧美 清纯 校园 另类 | 黄+色+性+人免费 |