簡體   English   中英

MySQL 5.7 和 8.0 的不同行為

[英]Different behavior with MySQL 5.7 and 8.0

我正在嘗試使用 MySQL 8.0,但遇到了一些問題。 我已經安裝了 MySQL 5.7 和 8.0,並且對 CHAR 列有不同的行為。

對於 MySQL 5.7:

mysql> create table test (id integer, c5 char(5));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values(0, 'a');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test where c5 = 'a    ';
+------+------+
| id   | c5   |
+------+------+
|    0 | a    |
+------+------+
1 row in set (0.00 sec)

mysql>

對於 MySQL 8.0:

mysql> create table test (id integer, c5 char(5));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test values(0, 'a');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test where c5 = 'a    ';
Empty set (0.00 sec)

mysql>

兩台服務器的配置相同。

MySQL 5.7:

[mysqld]
port=3357
datadir=/opt/mysql_57/data
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
default_storage_engine=innodb
character-set_server=utf8mb4
socket=/opt/mysql_57/mysql57.sock
max_allowed_packet=4194304
server_id=1
lower_case_table_names=0

MySQL 8.0:

[mysqld]
port=3380
datadir=/opt/mysql_80/data
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
default_storage_engine=innodb
character-set_server=utf8mb4
socket=/opt/mysql_80/mysql80.sock
max_allowed_packet=4194304
server_id=1
lower_case_table_names=0

MySQL 8.0 更新日志的簡要概述沒有給我任何信息。 哪里描述了這種行為變化?

此致。

MySQL 如何處理尾隨空格,取決於所使用的排序規則。 有關詳細信息,請參閱https://dev.mysql.com/doc/refman/8.0/en/charset-binary-collat​​ions.html

5.7 和 8.0 之間的變化是,默認字符集現在是帶有 NOPAD 排序規則的 UTF8mb4。

如果您想要另一種行為,您應該更改列/表/數據庫的字符集/排序規則。 檢查 INFORMATION_SCHEMA 表 COLLATIONS 以獲取可用的 PAD 排序規則。 (一個警告:舊的 PAD SPACE 排序規則可能效率較低。已經做了相當多的工作來提高基於 UCA 9.0.0 的新 Unicode 排序規則的性能。)

請參閱 MySQL 文檔中的PAD_CHAR_TO_FULL_LENGTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM