使用 LIKE 条件搜索 sql 的德语字符
searching for german characters with sql using LIKE condition
我正在使用一个使用德语名称的数据库,即 Fürst
。现在我构建了一个带有搜索字段的 HTML-Form。使用 htmlentities
并进行一些测试以验证未输入 "bad stuff",然后在查询之前输入 html_entity_decode
。一个简单的查询将如下所示:
SELECT * FROM user_table WHERE firstname LIKE "%fü%" OR lastname LIKE "%fü%"
然而,这个发现不仅 Fürst
,而且 Furt
。我怎样才能解决这个问题?数据库和表在 utf8_unicode_ci
中并且必须保持原样。
SELECT * FROM user_table WHERE firstname LIKE "%fü%" COLLATE utf8mb4_german2_ci
OR lastname LIKE "%fü%" COLLATE utf8mb4_german2_ci
utf8mb4_unicode_ci 也可能有效。
(简单的评论太长了。)
COLLATION
名称以 CHARACTER SET
名称开头。此线程提到了 utf8
、utf8mb4
和 latin1
CHARACTER SETs
。对于给定的 CHARACTER SET
.
,您必须 使用 COLLATION
先挑一个CHARACTER SET
。 utf8
、utf8mb4
和 latin1
都处理德语。但如果您希望处理其他语言,请考虑:
latin
仅限于西欧语言。例如,它不能处理希腊语。 (latin1 每个字符需要 1 个字节。)
utf8mb4
涵盖所有已知语言,还有更多空间。 (每个字符最多 4 个字节)此 CHARACTER SET
在版本 5.5.3 之前不可用。
utf8
是 utf8mb4
的一个子集,省略了一些汉字和较新的表情符号。 (每个字符最多 3 个字节)
CHARACTER SET
提供字符的字节编码。 COLLATION
表示两个字符串如何比较,例如 ss
和 ß
是否应该被视为相等。
在 选择 CHARACTER SET
之后,选择 COLLATION
。或者让 id 'default': latin1_swedish_ci
/ utf8_general_ci
/ utf8mb4_general_ci
。这些默认值对于多语言使用来说还算不错;但这值得商bat。 ss
!= ß
所有这些默认值。
展望未来,"best" 解决方案是 utf8mb4
和 utf8mb4_unicode_520_ci
整体多语言数据。
如果您只关注德语,那么您可能 想考虑 ..._german2_ci
归类。例如:
utf8_german2_ci A=a=ª=À=Á=Á=Â=Ã=Å=à=á=á=â=ã=å=Ā=ā=Ą=ą < ae=Ä=Æ=ä=æ < az < B
utf8_unicode_520_ci A=a=ª=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą < ae=Æ=æ < az < B
utf8_unicode_ci A=a=ª=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą < ae < az < Æ=æ < B
utf8_general_ci A=a=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą < Z < Æ=æ
(utf8mb4_...
归类同上。)
所以,如果您真的很关心 æ
的比较方式,则需要对排序规则挑剔。 (utf8 和 utf8mb4 作用相同。)More collation comparisions.
ue=Ü=ü
用于 ..._german2_ci
排序规则,但可能没有其他排序规则。其他的(大部分)对待U=u=Ü=ü
,留下ue
作为两个字母进行比较。
我正在使用一个使用德语名称的数据库,即 Fürst
。现在我构建了一个带有搜索字段的 HTML-Form。使用 htmlentities
并进行一些测试以验证未输入 "bad stuff",然后在查询之前输入 html_entity_decode
。一个简单的查询将如下所示:
SELECT * FROM user_table WHERE firstname LIKE "%fü%" OR lastname LIKE "%fü%"
然而,这个发现不仅 Fürst
,而且 Furt
。我怎样才能解决这个问题?数据库和表在 utf8_unicode_ci
中并且必须保持原样。
SELECT * FROM user_table WHERE firstname LIKE "%fü%" COLLATE utf8mb4_german2_ci
OR lastname LIKE "%fü%" COLLATE utf8mb4_german2_ci
utf8mb4_unicode_ci 也可能有效。
(简单的评论太长了。)
COLLATION
名称以 CHARACTER SET
名称开头。此线程提到了 utf8
、utf8mb4
和 latin1
CHARACTER SETs
。对于给定的 CHARACTER SET
.
COLLATION
先挑一个CHARACTER SET
。 utf8
、utf8mb4
和 latin1
都处理德语。但如果您希望处理其他语言,请考虑:
latin
仅限于西欧语言。例如,它不能处理希腊语。 (latin1 每个字符需要 1 个字节。)utf8mb4
涵盖所有已知语言,还有更多空间。 (每个字符最多 4 个字节)此CHARACTER SET
在版本 5.5.3 之前不可用。utf8
是utf8mb4
的一个子集,省略了一些汉字和较新的表情符号。 (每个字符最多 3 个字节)
CHARACTER SET
提供字符的字节编码。 COLLATION
表示两个字符串如何比较,例如 ss
和 ß
是否应该被视为相等。
在 选择 CHARACTER SET
之后,选择 COLLATION
。或者让 id 'default': latin1_swedish_ci
/ utf8_general_ci
/ utf8mb4_general_ci
。这些默认值对于多语言使用来说还算不错;但这值得商bat。 ss
!= ß
所有这些默认值。
展望未来,"best" 解决方案是 utf8mb4
和 utf8mb4_unicode_520_ci
整体多语言数据。
如果您只关注德语,那么您可能 想考虑 ..._german2_ci
归类。例如:
utf8_german2_ci A=a=ª=À=Á=Á=Â=Ã=Å=à=á=á=â=ã=å=Ā=ā=Ą=ą < ae=Ä=Æ=ä=æ < az < B
utf8_unicode_520_ci A=a=ª=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą < ae=Æ=æ < az < B
utf8_unicode_ci A=a=ª=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą < ae < az < Æ=æ < B
utf8_general_ci A=a=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā=ā=Ą=ą < Z < Æ=æ
(utf8mb4_...
归类同上。)
所以,如果您真的很关心 æ
的比较方式,则需要对排序规则挑剔。 (utf8 和 utf8mb4 作用相同。)More collation comparisions.
ue=Ü=ü
用于 ..._german2_ci
排序规则,但可能没有其他排序规则。其他的(大部分)对待U=u=Ü=ü
,留下ue
作为两个字母进行比较。