欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql建庫(kù)字符集和排序規(guī)則及說明

 更新時(shí)間:2022年12月09日 15:45:25   作者:Lou_Lan  
這篇文章主要介紹了Mysql建庫(kù)字符集和排序規(guī)則及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

概述

我們?cè)谑褂胢ysql的時(shí)候,尤其是在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候,我們需要選擇當(dāng)前數(shù)據(jù)庫(kù)的字符集和排序規(guī)則,這樣你庫(kù)里面的創(chuàng)建數(shù)據(jù)表的時(shí)候默認(rèn)的編碼方式就是庫(kù)選擇好的。

我們這里舊按照navicat創(chuàng)建數(shù)據(jù)庫(kù)的來說。(主要講述中國(guó)的使用習(xí)慣)

在這里插入圖片描述

由于漢字的特殊性,數(shù)量多等原因,我們一般在寫代碼或者寫其它文檔的時(shí)候都是選擇***UTF-8***的編碼方式,所以我們創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候一般是選擇UTF-8.但是我們可以看到數(shù)據(jù)床架的時(shí)候,字符集的選擇有:utf8 以及 utf8mb4 這兩種方式。

那么兩種因該是選擇哪一種呢,下面稍后看我給你吹(一般是utf8mb4)。

在這里插入圖片描述

字符集選擇結(jié)束之后我們還需要選擇這個(gè)排序規(guī)則,我們都知道字符集是保存數(shù)據(jù)時(shí)候需要的編碼方式,那么這個(gè)排序規(guī)則是干什么用的呢?

排序規(guī)則

是指對(duì)指定字符集下不同字符的比較規(guī)則。其特征有以下幾點(diǎn)

  • 1.兩個(gè)不同的字符集不能有相同的排序規(guī)則
  • 2.兩個(gè)字符集有一個(gè)默認(rèn)的排序規(guī)則
  • 3.有一些常用的命名規(guī)則。如_ci結(jié)尾表示大小寫不敏感(caseinsensitive),_cs表示大小寫敏感(case sensitive),_bin表示二進(jìn)制的比較(binary).

那么排序的規(guī)則應(yīng)該怎么選擇,也看下面我給你吹。

字符集的選擇

概述中我們已經(jīng)說了,在中國(guó)一般使用的編碼方式大部分都是UTF-8,但是mysql的數(shù)據(jù)庫(kù)中給出了兩種選“utf8”,一個(gè)是“utf8mb4”。

根據(jù)查詢資料得知mysql的“utf8”并不是我們常見到的UTF-8,反而“utf8mb4”是我們常用的UTF-8。

為什么會(huì)這樣呢?

根據(jù)查詢得知MYSQL中的“utf8”編碼只支持每個(gè)字符最大3個(gè)字節(jié)的編碼方式,而我們通常使用的UTF-8是每個(gè)字符最大4個(gè)字節(jié)的編碼方式。

這個(gè)問題在我們中國(guó)看來就是一個(gè)bug,但是MYSQL并沒有對(duì)這個(gè)bug進(jìn)行修復(fù),而是在2010年增加了一個(gè)新的字符集“utf8mb4”,這個(gè)才對(duì)應(yīng)了我們常使用的UTF-8。

所以在我們這邊,尤其是存儲(chǔ)漢字的時(shí)候,需要使用的編碼方式是“utf8mb4”。

#查詢utf8和utf8mb4長(zhǎng)度信息
SHOW CHARSET LIKE 'utf8%';
# 修改表的字符集
ALTER TABLE dm_user CONVERT TO CHARACTER SET utf8mb4;

排序規(guī)則

編碼規(guī)則我就按照字符集是“utf8mb4”的繼續(xù)說明,我們要說的字符集主要就三個(gè):

  • utf8mb4_bin
  • utf8mb4_general_ci
  • utf8mb4_unicode_ci

1. utf8mb4_bin

bin的意思就是二進(jìn)制的意思,也就是說排序查找的規(guī)則是按照二進(jìn)制的方式進(jìn)行查找的,這里就會(huì)涉及到我們常常說到的數(shù)據(jù)庫(kù)里面的大小寫區(qū)分。

比如說:

  • a的二進(jìn)制編碼是: 01100001
  • A的二進(jìn)制編碼是: 01000001

那么我們?cè)趫?zhí)行

SELECT * FROM dm_user WHERE username='a';
SELECT * FROM dm_user WHERE username='A';

這兩條sql語(yǔ)句的結(jié)果是不一樣的,因?yàn)閍和A的二進(jìn)制編碼是不一樣的。

2. utf8mb4_unicode_ci 和 utf8mb4_general_ci

首先要說明的是,這兩種排序規(guī)則都是不區(qū)分大小寫的,也就是說在這兩種排序規(guī)則下,a和A是一樣的。

根據(jù)資料了解,這兩種排序規(guī)則要從兩個(gè)方面來看,一個(gè)是準(zhǔn)確性,一個(gè)是性能。兩種排序規(guī)則的說明鏈接

準(zhǔn)確性

  • utf8mb4_unicode_ci 是基于標(biāo)準(zhǔn)的Unicode來排序和比較,能夠在各種語(yǔ)言之間精確排序。
  • utf8mb4_general_ci 沒有實(shí)現(xiàn)Unicode排序規(guī)則,在遇到某些特殊語(yǔ)言或字符是,排序結(jié)果可能不是所期望的。

utf8mb4_unicode_ci使用unicode規(guī)則進(jìn)行排序和比較,它使用相當(dāng)復(fù)雜的算法在各種語(yǔ)言中以及在使用各種特殊字符時(shí)進(jìn)行正確排序。

這些規(guī)則需要考慮到特定語(yǔ)言的約定,并不是每個(gè)人都按照我們所說的“字母順序”對(duì)字符進(jìn)行排序。就拉丁語(yǔ)(即“歐洲”)而言,MySQL中的Unicode排序和簡(jiǎn)化的utf8mb4_general_ci排序沒有太大區(qū)別,但仍有一些區(qū)別:

例如:Unicode排序規(guī)則按使用這些字符的人通常希望的方式將“ß”排序?yàn)?ldquo;ss”,將“Œ”排序?yàn)?ldquo;OE”,而utf8mb4_general_ci將它們排序?yàn)閱蝹€(gè)字符(可能分別類似于“s”和“e”)。

一些Unicode字符被定義為可忽略字符,這意味著它們不應(yīng)計(jì)入排序順序,而應(yīng)將比較移到下一個(gè)字符。utf8mb4_unicode_ci可以正確處理這些問題。在非拉丁語(yǔ)言(如亞洲語(yǔ)言或不同字母表的語(yǔ)言)中,Unicode排序和簡(jiǎn)化的utf8mb4_ci排序之間可能有更多的差異。utf8mb4_-general_ci的適用性將在很大程度上取決于所使用的語(yǔ)言。對(duì)某些語(yǔ)言來說,這是相當(dāng)不夠的。

性能

  • utf8mb4_general_ci 在比較和排序的時(shí)候更快
  • utf8mb4_unicode_ci 在特殊情況下,Unicode排序規(guī)則為了能夠處理特殊字符的情況,實(shí)現(xiàn)了略微復(fù)雜的排序算法。

以前我們使用general方式的排序,是受限于cpu的速度,所以使用更快的排序規(guī)則,但是就目前的服務(wù)器而言,cpu的速度已經(jīng)可以忽略這兩種排序規(guī)則的速度差異了,所以個(gè)人也認(rèn)為unicode規(guī)則會(huì)更好一點(diǎn)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • centos7下安裝mysql的教程

    centos7下安裝mysql的教程

    這篇文章主要介紹了centos7安裝mysql的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • mysql8.0.18下安裝winx64的詳細(xì)教程(圖文詳解)

    mysql8.0.18下安裝winx64的詳細(xì)教程(圖文詳解)

    這篇文章主要介紹了安裝mysql-8.0.18-win-x64的詳細(xì)教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解MySQL 數(shù)據(jù)庫(kù)范式

    詳解MySQL 數(shù)據(jù)庫(kù)范式

    這篇文章主要介紹了詳解MySQL 數(shù)據(jù)庫(kù)范式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-11-11
  • MySQL用戶管理與PostgreSQL用戶管理的區(qū)別說明

    MySQL用戶管理與PostgreSQL用戶管理的區(qū)別說明

    這篇文章主要介紹了MySQL用戶管理與PostgreSQL用戶管理的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 在Linux系統(tǒng)的命令行中為MySQL創(chuàng)建用戶的方法

    在Linux系統(tǒng)的命令行中為MySQL創(chuàng)建用戶的方法

    這篇文章主要介紹了在Linux系統(tǒng)的命令行中為MySQL創(chuàng)建用戶的方法,包括對(duì)所建用戶的權(quán)限管理,需要的朋友可以參考下
    2015-06-06
  • SSM實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)賬號(hào)密碼密文登錄功能

    SSM實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)賬號(hào)密碼密文登錄功能

    這篇文章主要介紹了SSM實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)賬號(hào)密碼密文登錄功能,本文分為三步給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • mysql如何將id重新修改為遞增

    mysql如何將id重新修改為遞增

    這篇文章主要介紹了mysql如何將id重新修改為遞增,本文模擬場(chǎng)景結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • mysqldump造成Buffer Pool污染的研究

    mysqldump造成Buffer Pool污染的研究

    mysqldump造成Buffer Pool污染的研究,需要的朋友可以參考下
    2012-10-10
  • MySQL使用索引優(yōu)化性能

    MySQL使用索引優(yōu)化性能

    這篇文章介紹了MySQL使用索引優(yōu)化性能的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • mysql關(guān)于or的索引的問題及解決

    mysql關(guān)于or的索引的問題及解決

    這篇文章主要介紹了mysql關(guān)于or的索引的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論