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

MySQL表排序規(guī)則不同錯(cuò)誤問(wèn)題分析

 更新時(shí)間:2017年10月12日 15:03:07   作者:彭東穩(wěn)  
這篇文章主要介紹了MySQL表排序規(guī)則不同錯(cuò)誤問(wèn)題分析,小編覺(jué)得挺不錯(cuò)的,這里分享給大家,供各位參考。

MySQL多表join時(shí)報(bào)錯(cuò)如下:[Err]1267 – Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=

就是說(shuō)兩個(gè)表的排序規(guī)則(COLLATION)不同,無(wú)法完成比較。COLLATION是用在排序,大小比較上,一個(gè)字符集有一個(gè)或多種COLLATION,并且以_ci(大小寫(xiě)不敏感)、_cs(大小寫(xiě)敏感)或_bin(二進(jìn)制)結(jié)束。在做比較時(shí),應(yīng)該確保兩個(gè)表的字符排序相同。一般建表的時(shí)候不指定,可以走默認(rèn)的,全是默認(rèn)的就沒(méi)什么問(wèn)題了。

下面來(lái)模擬一下各種場(chǎng)景,表結(jié)構(gòu)如下(utf8默認(rèn)排序規(guī)則為utf8_general_ci):

mysql> show create table test.cs\G
*************************** 1. row ***************************
    Table: cs
Create Table: CREATE TABLE `cs` (
 `id` int(11) DEFAULT NULL,
 `name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

查看表默認(rèn)排序規(guī)則集

mysql> select TABLE_SCHEMA,TABLE_NAME,TABLE_COLLATION from information_schema.tables where table_name='cs';
+--------------+------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |
+--------------+------------+-----------------+
| test     | cs     | utf8_general_ci |
+--------------+------------+-----------------+
1 row in set (0.00 sec)

查看列排序規(guī)則集

mysql> select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME from information_schema.COLUMNS where TABLE_NAME='cs';
+--------------+------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | COLLATION_NAME |
+--------------+------------+-------------+-----------------+
| test     | cs     | id     | NULL      |
| test     | cs     | name    | utf8_general_ci |
+--------------+------------+-------------+-----------------+
2 rows in set (0.00 sec)

從utf8升級(jí)為utf8mb4是不支持online ddl的,如下:

mysql> ALTER TABLE cs CONVERT TO CHARACTER SET utf8mb4,ALGORITHM=INPLACE,LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.

從utf8.utf8_general_ci變更為utf8.utf8_unicode_ci是不支持online ddl的,如下:

mysql> ALTER TABLE cs CONVERT TO CHARACTER SET utf8 collate utf8_unicode_ci,ALGORITHM=INPLACE,LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.

如果使用下面這種方式修改字符集,你會(huì)發(fā)現(xiàn),只更改了表級(jí)的,沒(méi)有更改列級(jí)的。

mysql> ALTER TABLE cs CHARACTER SET utf8 collate utf8_unicode_ci;      
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
mysql> select TABLE_SCHEMA,TABLE_NAME,TABLE_COLLATION from information_schema.tables where table_name='cs';      
+--------------+------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |
+--------------+------------+-----------------+
| test     | cs     | utf8_unicode_ci |
+--------------+------------+-----------------+
1 row in set (0.00 sec)
 
mysql> select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME from information_schema.COLUMNS where TABLE_NAME='cs';
+--------------+------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | COLLATION_NAME |
+--------------+------------+-------------+-----------------+
| test     | cs     | id     | NULL      |
| test     | cs     | name    | utf8_general_ci |
+--------------+------------+-------------+-----------------+
2 rows in set (0.00 sec)

所以真正改字符集的時(shí)候別忘了加上CONVERT TO,如下:

mysql> ALTER TABLE cs CONVERT TO CHARACTER SET utf8 collate utf8_unicode_ci;
Query OK, 5 rows affected (0.06 sec)
Records: 5 Duplicates: 0 Warnings: 0
 
mysql> select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME from information_schema.COLUMNS where TABLE_NAME='cs';
+--------------+------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | COLLATION_NAME |
+--------------+------------+-------------+-----------------+
| test     | cs     | id     | NULL      |
| test     | cs     | name    | utf8_unicode_ci |
+--------------+------------+-------------+-----------------+
2 rows in set (0.00 sec)

要僅僅改變一個(gè)表的默認(rèn)字符集,應(yīng)使用此語(yǔ)句:

mysql> ALTER TABLE cs default CHARACTER SET utf8 collate utf8_general_ci,ALGORITHM=INPLACE,LOCK=NONE;         
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
mysql> select TABLE_SCHEMA,TABLE_NAME,TABLE_COLLATION from information_schema.tables where table_name='cs';      
+--------------+------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |
+--------------+------------+-----------------+
| test     | cs     | utf8_general_ci |
+--------------+------------+-----------------+
1 row in set (0.00 sec)
 
mysql> select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME from information_schema.COLUMNS where TABLE_NAME='cs';  
+--------------+------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | COLLATION_NAME |
+--------------+------------+-------------+-----------------+
| test     | cs     | id     | NULL      |
| test     | cs     | name    | utf8_unicode_ci |
+--------------+------------+-------------+-----------------+
2 rows in set (0.00 sec)

可以發(fā)現(xiàn)列字符集沒(méi)有改變,并且只有新的列才會(huì)默認(rèn)繼承表的字符集(utf8.utf8_general_ci)。

總結(jié)

以上就是本文關(guān)于MySQL表排序規(guī)則不同錯(cuò)誤問(wèn)題分析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以參閱:幾個(gè)比較重要的MySQL變量、MySQL 聲明變量及存儲(chǔ)過(guò)程分析、MySQL主庫(kù)binlog(master-log)與從庫(kù)relay-log關(guān)系代碼詳解MySQL prepare原理詳解等,有什么問(wèn)題可以隨時(shí)留言,互相交流,共同進(jìn)步。

相關(guān)文章

  • mysql 8.0.21 安裝配置方法圖文教程

    mysql 8.0.21 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.21 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • MySQL中報(bào)錯(cuò):Can’t find file: ‘./mysql/plugin.frm’的解決方法

    MySQL中報(bào)錯(cuò):Can’t find file: ‘./mysql/plugin.frm’的解決方法

    這篇文章主要給大家介紹了關(guān)于在MySQL中報(bào)錯(cuò):Can't find file: './mysql/plugin.frm'的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • MySQL如何從不固定位置提取字符串元素詳解

    MySQL如何從不固定位置提取字符串元素詳解

    這篇文章主要給大家介紹了關(guān)于MySQL如何從不固定位置提取字符串元素的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • mysql 一次向表中插入多條數(shù)據(jù)實(shí)例講解

    mysql 一次向表中插入多條數(shù)據(jù)實(shí)例講解

    這篇文章主要介紹了mysql 一次向表中插入多條數(shù)據(jù)實(shí)例講解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • MySQL函數(shù)CONCAT、CONCAT_WS、GROUP_CONCAT用法詳解

    MySQL函數(shù)CONCAT、CONCAT_WS、GROUP_CONCAT用法詳解

    這篇文章主要介紹了MySQL函數(shù)CONCAT、CONCAT_WS、GROUP_CONCAT用法詳解,CONCAT 函數(shù)用于將兩個(gè)字符串連接為一個(gè)字符串,本文通過(guò)實(shí)例代碼詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • 分組查詢GROUP BY的使用與SQL執(zhí)行順序的講解

    分組查詢GROUP BY的使用與SQL執(zhí)行順序的講解

    今天小編就為大家分享一篇關(guān)于分組查詢GROUP BY的使用與SQL執(zhí)行順序的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • mysql觸發(fā)器中監(jiān)控字段的改變方式

    mysql觸發(fā)器中監(jiān)控字段的改變方式

    這篇文章主要介紹了mysql觸發(fā)器中監(jiān)控字段的改變方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL?Online?DDL原理解析

    MySQL?Online?DDL原理解析

    MySQL原生OnlineDDL通過(guò)允許在表可用的情況下執(zhí)行DDL操作,大大提升了數(shù)據(jù)庫(kù)的可用性,通過(guò)不同的執(zhí)行算法,如COPY、INPLACE和INSTANT,它支持在線修改數(shù)據(jù)庫(kù)結(jié)構(gòu),優(yōu)化了數(shù)據(jù)庫(kù)維護(hù)流程,本文給大家介紹MySQL?Online?DDL原理,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • MySQL關(guān)于字符串中數(shù)字排序的問(wèn)題分析

    MySQL關(guān)于字符串中數(shù)字排序的問(wèn)題分析

    這篇文章主要介紹了MySQL關(guān)于字符串中數(shù)字排序的問(wèn)題,結(jié)合實(shí)例形式分析了mysql按照數(shù)值排序的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • sql格式化工具集合

    sql格式化工具集合

    如果想要我們的SQL語(yǔ)句看起來(lái)很美觀,除了自己平時(shí)注意外,還有一個(gè)懶人方法
    2011-08-08

最新評(píng)論