no_*_*ity 6 mysql sql database mariadb
使用这样的表时:
CREATE TABLE test (
name VARCHAR(100),
INDEX name_index (name)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Run Code Online (Sandbox Code Playgroud)
然后插入一些数据:
INSERT INTO test(name) VALUES('ü here is a smiley');
INSERT INTO test(name) VALUES('ü no space smiley');
INSERT INTO test(name) VALUES('ü space smiley');
INSERT INTO test(name) VALUES('ü without smiley');
Run Code Online (Sandbox Code Playgroud)
此查询失败:
SELECT * FROM test WHERE name LIKE ("ü%");
Run Code Online (Sandbox Code Playgroud)
它省略了“ü 无空格笑脸”行。
这是一个数据库小提琴:
https://www.db-fiddle.com/f/bR6Yx2PXPJdD7iSCLnW65Y/0
有趣的是,当删除索引时,结果会发生变化。因此,如果演示中没有第 3 行,它会按预期运行。
这是一个已知的错误?
我在 MySql 5.7、MySql 8.0 和 MariaDB 10.3 中尝试过——都表现出相同的行为。
在我在另一个小提琴上尝试了您的代码之后:https://dbfiddle.uk/?rdbms=mysql_5.7 \n它适用于 MySQL 5.7 和 MySQL 5.6 以及 MariaDB 10.3,但您已经注意到它不适用于MySQL 8.0。
\n\n我已将您的代码更改为CREATE TABLE
:
CREATE TABLE test (\n name VARCHAR(100),\n INDEX name_index (name)\n) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;\n
Run Code Online (Sandbox Code Playgroud)\n\n现在就可以了:) DEMO \n希望这有帮助。\n干杯!
\n\n有关更多信息,请查看此处的文档:
\n\nhttps://dev.mysql.com/doc/refman/5.7/en/charset.html \n https://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html
\n\n更新
\n\n第一个解决方案不起作用,因为 u = \xc3\xbc 在这种情况下使用:
\n\nCREATE TABLE test (\n name VARCHAR(100),\n INDEX name_index (name)\n) CHARACTER SET gb18030 COLLATE gb18030_chinese_ci;\n
Run Code Online (Sandbox Code Playgroud)\n\n新演示
\n\n更新2
\n\n好吧,如果这是交易:“字符集需要是 utf8mb4”:) 那么无需更改任何内容,您可以尝试此查询:
\n\nSELECT name from test\nwhere hex(name) like concat(\'%\',hex(\'\xc3\xbc\'),\'%\')\n
Run Code Online (Sandbox Code Playgroud)\n\n这是一个新小提琴中的演示,您要求对其进行解释。\n干杯。
\n 归档时间: |
|
查看次数: |
195 次 |
最近记录: |