最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入MYSQL中的COLLATE

 更新時間:2023年08月31日 11:29:41   作者:言慢行善  
MYSQL COLLATE是用于指定字符集的排序規(guī)則的關(guān)鍵詞,它可以用于在查詢中對字符數(shù)據(jù)進行排序和比較,具有一定的參考價值,感興趣的可以了解一下

概念:COLLATE 含義 核對、校對

CREATE TABLE `table1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`field1` text COLLATE utf8_unicode_ci NOT NULL COMMENT '字段1',
`field2` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '字段2',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8_unicode_ci COMMENT '測試表';

 mysql中字符型的列/字段 需要一個COLLATE類型來告知mysql如何對該列進行排序和比較

簡而言之,COLLATE會影響到ORDER BY語句的順序,會影響到WHERE條件中大于小于號篩選出來的結(jié)果,會影響**DISTINCT**、**GROUP BY**、**HAVING**語句的查詢結(jié)果。

mysql建索引的時候,如果索引列是字符類型,也會影響索引創(chuàng)建

凡是涉及到字符類型比較或排序的地方,都會和COLLATE有關(guān)系

COLLATE通常是和數(shù)據(jù)編碼(CHARSET)相關(guān)的,一般來說每種CHARSET都有多種它所支持的COLLATE,并且每種CHARSET都指定一種COLLATE為默認(rèn)值。例如Latin1編碼的默認(rèn)COLLATE為latin1_swedish_ci,GBK編碼的默認(rèn)COLLATE為gbk_chinese_ci,utf8mb4編碼的默認(rèn)值為utf8mb4_general_ci

 注意:建表時  DEFAULT CHARSET=utf8mb3 之前,現(xiàn)在多寫為 DEFAULT CHARSET=utf8mb4  (表情符號如:微信?—占據(jù)4bytes)

區(qū)分charset 與collate不同

charset設(shè)置字符串編碼集,常用的utf8,mysql遺留問題utf8最存儲3字節(jié)的大小,4字節(jié)的文字無法存儲,需要utf8mb4

collate和charset關(guān)聯(lián),定義了字符串的排序規(guī)則,如utf8mb4_general_ci是和utf8mb4對應(yīng)的排序規(guī)則,ci為Case Insensitive,即大小寫不敏感

對應(yīng)cs為Case Sensitive,即大小寫敏感  【where name='A'與name='a'效果一致!ci不敏感時】

查看數(shù)據(jù)庫的所有charset和collate

SHOW CHARACTER SET;

SHOW COLLATION;

 

設(shè)置collate的級別【庫、表和字段】

庫    CREATE DATABASE <db_name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
表   CREATE TABLE tablename (

  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
 ...
 ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

SQL級別查詢   顯示聲明覆蓋表中的COLLATE設(shè)置

SELECT DISTINCT field1 COLLATE utf8mb4_general_ci FROM table1;
SELECT field1, field2 FROM table1 ORDER BY field1 COLLATE utf8mb4_general_ci;

優(yōu)先級順序是 SQL語句 > 列級別設(shè)置 > 表級別設(shè)置 > 庫級別設(shè)置 > 實例級別設(shè)置

額外對比-常用utf8mb4_general_ci

utf8mb4_general_ci : 不區(qū)分大小寫, utf8mb4_general_cs 區(qū)分大小寫

utf8mb4_bin : 將字符串每個字符串用二進制數(shù)據(jù)編譯存儲,區(qū)分大小寫,而且可以存二進制的內(nèi)容。

utf8mb4_unicode_ci : 校對規(guī)則僅部分支持Unicode校對規(guī)則算法,一些字符還是不能支持;utf8mb4_unicode_ci不能完全支持組合的記號。

項目遇到的問題

不同表同一字段,創(chuàng)建的數(shù)據(jù)庫表指定字符串排序規(guī)則為utf8mb4_general_ci和utf8mb4_unicode_ci兩種,導(dǎo)致關(guān)聯(lián)無法比較

【charset不同實際問題:慢SQL,查詢速度巨慢??!】

【collate不同實際問題:無法關(guān)聯(lián),報錯??!】

-- 錯誤 SELECT a.mobile from play a INNER JOIN user_t b ON a.mobile = b.mobile

--正確 SELECT a.mobile from play a INNER JOIN user_t b ON a.mobile = b.mobile COLLATE utf8mb4_general_ci  [顯示轉(zhuǎn)為與a的collate規(guī)則一致!]

注意:一般情況下同數(shù)據(jù)庫中表的字段排序類型都是相同的!,除非開發(fā)者不小心導(dǎo)致

修改charset或collate

實際開發(fā)中,我建錯表的charset[uat與生成環(huán)境不同!按理需要一致的]

處理:將表中數(shù)據(jù)轉(zhuǎn)換;修改表的默認(rèn)字符集

修改庫的默認(rèn)字符集
alter database XXX default character set utf8mb4 COLLATE utf8mb4_unicode_ci;
修改表的默認(rèn)字符集
ALTER TABLE XXX DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
將表中原來的數(shù)據(jù)轉(zhuǎn)換為utf8mb4
ALTER TABLE XXX CONVERT TO CHARACTER SET utf8mb4;
修改列字符集
ALTER TABLE XXX CHANGE column_name VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

到此這篇關(guān)于深入MYSQL中的COLLATE的文章就介紹到這了,更多相關(guān)MYSQL COLLATE內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql命令行導(dǎo)入sql數(shù)據(jù)的代碼

    Mysql命令行導(dǎo)入sql數(shù)據(jù)的代碼

    Mysql命令行導(dǎo)入sql數(shù)據(jù)的實現(xiàn)方法是我們經(jīng)常會用到的,下面就為你詳細(xì)介紹Mysql命令行導(dǎo)入sql數(shù)據(jù)的方法步驟,希望對您學(xué)習(xí)Mysql命令行方面能有所幫助。
    2010-12-12
  • MySQL中數(shù)據(jù)類型的驗證

    MySQL中數(shù)據(jù)類型的驗證

    這篇文章主要介紹了MySQL中數(shù)據(jù)類型的驗證 的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • 重裝MySQL最后一步失敗的完美解決方案(經(jīng)驗總結(jié))

    重裝MySQL最后一步失敗的完美解決方案(經(jīng)驗總結(jié))

    使用MySQL都有過重裝的經(jīng)歷,要是重裝MySQL基本都是在最后一步通不過,究竟是什么原因呢?下面是我總結(jié)的一點經(jīng)驗,都是血的教訓(xùn)
    2014-06-06
  • mysql自動化安裝腳本(ubuntu and centos64)

    mysql自動化安裝腳本(ubuntu and centos64)

    這篇文章主要介紹了mysql自動化安裝腳本(ubuntu and centos64),需要的朋友可以參考下
    2014-05-05
  • MySQL唯一索引和普通索引選哪個?

    MySQL唯一索引和普通索引選哪個?

    這篇文章主要介紹了MySQL唯一索引和普通索引的優(yōu)劣,幫助大家更好的理解和使用MySQL索引,感興趣的朋友可以了解下
    2020-10-10
  • 利用mysql事務(wù)特性實現(xiàn)并發(fā)安全的自增ID示例

    利用mysql事務(wù)特性實現(xiàn)并發(fā)安全的自增ID示例

    項目中經(jīng)常會用到自增id,比如uid,下面為大家介紹下利用mysql事務(wù)特性實現(xiàn)并發(fā)安全的自增ID,感興趣的朋友可以參考下
    2013-11-11
  • centos 6.4下使用rpm離線安裝mysql

    centos 6.4下使用rpm離線安裝mysql

    這篇文章主要為大家詳細(xì)介紹了centos 6.4下使用rpm離線安裝mysql的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺談MySQL timestamp(3)問題

    淺談MySQL timestamp(3)問題

    本文主要介紹了淺談MySQL timestamp(3)問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Mysql慢查詢?nèi)罩疚募D(zhuǎn)Excel的方法

    Mysql慢查詢?nèi)罩疚募D(zhuǎn)Excel的方法

    面對公司生產(chǎn)環(huán)境中慢SQL問題的排查工作,由于日志文件格式混亂,相關(guān)資料無法提供便捷的格式化處理工具,故而自主編寫一套Java讀取慢SQL日志轉(zhuǎn)為Excel的小工具,該工具可以有效提升排查工作的效率,方便快捷地解決問題
    2024-10-10
  • MySQL?時區(qū)與?serverTimezone詳解

    MySQL?時區(qū)與?serverTimezone詳解

    存儲?TIMESTAMP?類型數(shù)據(jù)時,MySQL 會根據(jù)當(dāng)前會話的時區(qū)將時間轉(zhuǎn)換為 UTC 時間,MySQL 實際存儲的是 UTC 時間,這篇文章主要介紹了MySQL?時區(qū)與?serverTimezone,需要的朋友可以參考下
    2024-12-12

最新評論

旅游| 连城县| 吉安市| 东兴市| 张家口市| 体育| 大厂| 望江县| 罗甸县| 沽源县| 肃宁县| 滁州市| 土默特右旗| 郧西县| 湖南省| 汉寿县| 马山县| 东兴市| 阜南县| 巴彦县| 乐清市| 鸡西市| 武定县| 海口市| 黑龙江省| 承德县| 南丹县| 来凤县| 高安市| 两当县| 南溪县| 广水市| 格尔木市| 九龙县| 澄迈县| 新宾| 祥云县| 额济纳旗| 资中县| 彰化市| 江油市|