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

深入MYSQL中的COLLATE

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

概念:COLLATE 含義 核對(duì)、校對(duì)

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 '測(cè)試表';

 mysql中字符型的列/字段 需要一個(gè)COLLATE類型來(lái)告知mysql如何對(duì)該列進(jìn)行排序和比較

簡(jiǎn)而言之,COLLATE會(huì)影響到ORDER BY語(yǔ)句的順序,會(huì)影響到WHERE條件中大于小于號(hào)篩選出來(lái)的結(jié)果會(huì)影響**DISTINCT**、**GROUP BY**、**HAVING**語(yǔ)句的查詢結(jié)果。

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

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

COLLATE通常是和數(shù)據(jù)編碼(CHARSET)相關(guān)的,一般來(lái)說(shuō)每種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

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

區(qū)分charset 與collate不同

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

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

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

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

SHOW CHARACTER SET;

SHOW COLLATION;

 

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

庫(kù)    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級(jí)別查詢   顯示聲明覆蓋表中的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)先級(jí)順序是 SQL語(yǔ)句 > 列級(jí)別設(shè)置 > 表級(jí)別設(shè)置 > 庫(kù)級(jí)別設(shè)置 > 實(shí)例級(jí)別設(shè)置

額外對(duì)比-常用utf8mb4_general_ci

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

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

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

項(xiàng)目遇到的問(wèn)題

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

【charset不同實(shí)際問(wèn)題:慢SQL,查詢速度巨慢!!】

【collate不同實(shí)際問(wèn)題:無(wú)法關(guān)聯(lián),報(bào)錯(cuò)?。 ?/p>

-- 錯(cuò)誤 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ù)庫(kù)中表的字段排序類型都是相同的!,除非開(kāi)發(fā)者不小心導(dǎo)致

修改charset或collate

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

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

修改庫(kù)的默認(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;
將表中原來(lái)的數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入探討:MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較

    深入探討:MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較

    本篇文章是對(duì)MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Mysql數(shù)據(jù)庫(kù)的一些命令

    Mysql數(shù)據(jù)庫(kù)的一些命令

    如果你習(xí)慣用 windows 的數(shù)據(jù)庫(kù),也就是在 圖形界面上操作數(shù)據(jù)庫(kù)的話,那么當(dāng)你在命令上 操作 mysql 將會(huì)感到陌生,其實(shí)只要你掌握了一些基本命令,還有經(jīng)常使用,熟練起來(lái)了, 將會(huì)相當(dāng)方便,而且很快速
    2013-11-11
  • MySQL中int(10)和int(11)的區(qū)別詳解

    MySQL中int(10)和int(11)的區(qū)別詳解

    本文主要介紹了MySQL中int(10)和int(11)的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mysql模糊查詢like和regexp小結(jié)

    mysql模糊查詢like和regexp小結(jié)

    在mysql中實(shí)現(xiàn)模糊查詢有兩種方法一種是LIKE/NOT LIKE,另一種是REGEXP/NOT REGEXP方法,下面我來(lái)給大家介紹它們的用法,希望此教程對(duì)各位同學(xué)會(huì)有所幫助。
    2014-09-09
  • MYSQL命令行模式管理MySql的一點(diǎn)心得

    MYSQL命令行模式管理MySql的一點(diǎn)心得

    MYSQL命令行模式管理MySql的一點(diǎn)心得...
    2007-09-09
  • MySQL中EXPLAIN命令詳解

    MySQL中EXPLAIN命令詳解

    在這里我們將介紹的是MySQL中EXPLAIN解釋命令,希望對(duì)大家有所幫助
    2014-08-08
  • MySQL字符集utf8修改為utf8mb4的方法步驟

    MySQL字符集utf8修改為utf8mb4的方法步驟

    這篇文章主要給大家介紹了關(guān)于MySQL字符集utf8修改為utf8mb4的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • ORM模型框架操作mysql數(shù)據(jù)庫(kù)的方法

    ORM模型框架操作mysql數(shù)據(jù)庫(kù)的方法

    ORM 全稱是(Object Relational Mapping)表示對(duì)象關(guān)系映射; 通俗理解可以理解為編程語(yǔ)言的虛擬數(shù)據(jù)庫(kù);這篇文章主要介紹了ORM模型框架操作mysql數(shù)據(jù)庫(kù)的方法,需要的朋友可以參考下
    2021-07-07
  • mysql中優(yōu)化和修復(fù)數(shù)據(jù)庫(kù)工具mysqlcheck詳細(xì)介紹

    mysql中優(yōu)化和修復(fù)數(shù)據(jù)庫(kù)工具mysqlcheck詳細(xì)介紹

    這篇文章主要介紹了mysql中優(yōu)化和修復(fù)數(shù)據(jù)庫(kù)工具mysqlcheck詳細(xì)介紹,需要的朋友可以參考下
    2014-05-05
  • MySQL中創(chuàng)建表的三種方法匯總

    MySQL中創(chuàng)建表的三種方法匯總

    這篇文章主要介紹了MySQL中創(chuàng)建表的三種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論