国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

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

2024-07-24 13:14:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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/222588.html">mysql> show create table test.cs/G*************************** 1. row ***************************    Table: csCreate Table: CREATE TABLE `cs` ( `id` int(11) DEFAULT NULL, `name` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 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ì)大家有所幫助。有什么問(wèn)題可以隨時(shí)留言,互相交流,共同進(jìn)步。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富裕县| 营山县| 蕉岭县| 南投县| 鹿泉市| 田阳县| 保康县| 新巴尔虎右旗| 尤溪县| 库尔勒市| 临朐县| 烟台市| 孟州市| 巫山县| 靖边县| 同德县| 平凉市| 台山市| 茶陵县| 怀来县| 思南县| 哈尔滨市| 天峻县| 通河县| 博罗县| 尚志市| 辉县市| 峨眉山市| 红桥区| 十堰市| 钦州市| 沂南县| 辉县市| 如东县| 囊谦县| 定陶县| 甘德县| 娱乐| 孟连| 南安市| 抚远县|