MySQL 5.7和8.0的行为不同

3

我想使用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 变更日志简介未提供任何信息。哪里描述了这些行为变更?
此致敬礼。
2个回答

4
MySQL如何处理尾随空格取决于所使用的排序规则。有关详细信息,请参见https://dev.mysql.com/doc/refman/8.0/en/charset-binary-collations.html
在5.7和8.0之间发生的变化是,默认字符集现在为UTF8mb4,并带有NOPAD排序规则。
如果您想要另一种行为,则应更改列/表/数据库的字符集/排序规则。请检查INFORMATION_SCHEMA表COLLATIONS以获取可用的PAD排序规则。(警告:旧的PAD SPACE排序规则可能不太高效。已经进行了相当多的工作来提高基于UCA 9.0.0的新Unicode排序规则的性能。)

-1

谢谢您的回答。我看到了这个信息。在这两种情况下,此模式都未启用。只启用了STRICT_TRANS_TABLES和NO_ENGINE_SUBSTITUTION。 - baldman88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接