我正在尝试使用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>
两个服务器都具有相同的配置。
5.7的MySQL:
[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更改日志的简要概述没有提供任何信息。在哪里描述了这种行为的变化?
最诚挚的问候。
答案 0 :(得分:2)
MySQL如何处理尾随空格,取决于所使用的排序规则。有关详情,请参见https://dev.mysql.com/doc/refman/8.0/en/charset-binary-collations.html。
在5.7和8.0之间进行了更改,在于默认字符集现在为带有NOPAD归类的UTF8mb4。
如果您想要其他行为,则应更改列/表/数据库的字符集/排序规则。检查INFORMATION_SCHEMA表的COLLATIONS中是否有可用的PAD归类。 (一个警告:较旧的PAD SPACE排序规则可能效率较低。已经做了很多工作来提高基于UCA 9.0.0的新Unicode排序规则的性能。)
答案 1 :(得分:0)
请参阅MySQL文档中的PAD_CHAR_TO_FULL_LENGTH