从Mysql中的SELECT ... LIKE请求获取UTF8值

时间:2015-07-03 17:43:13

标签: php mysql utf-8

在PHP脚本中,我正在进行(硬编码)MySQL-Request:

SELECT text FROM `mytexts` WHERE text LIKE '%ö%'

错误地返回文本" willkommen" (但不是文本" willkammen")。

我试图为UTF8正确设置所有内容:

  • 源代码文件位于" UTF8,没有BOM"。

  • 数据库,表格和字段(数字字段除外)整理为" utf8_unicode_ci"。

  • 连接由$server = mysqli_connect($dbhostname,$dbuser,$dbpass,$dbname);后跟mysqli_set_charset($server, "utf8");

  • 完成
  • 数据(" willkommen"" willkammen")已由硬编码INSERT输入

如何让我的SELECT工作正常?

2 个答案:

答案 0 :(得分:2)

你可能必须设置another collation,一个不处理ö== o但仍然不区分大小写的。

SHOW COLLATION

显示所有可用的排序规则 (_utf8 x'c3b6'是字符ö作为unicode hex literal:)

select _utf8 x'c3b6' COLLATE utf8_general_ci LIKE 'o'

- >这种整理在Umlauten与其相应的基本元音对应物之间没有区别。

select _utf8 x'c3b6' COLLATE utf8_bin LIKE 'o'

- >好的,但是这个不是不区分大小写的。

select _utf8 x'c3b6' COLLATE utf8_german2_ci LIKE 'o'

- >这是我最好的猜测。

答案 1 :(得分:1)

以下是utf8(或utf8mb4)的一些等价:

utf8 : utf8_croatian_ci            O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_czech_ci               O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_danish_ci              O=o=º=Ò=Ó=Ó=Ô=Õ=ò=ó=ó=ô=õ          oe=Œ=œ      oz
utf8 : utf8_esperanto_ci           O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_estonian_ci            O=o=º=Ò=Ó=Ó=Ô=ò=ó=ó=ô              oe=Œ=œ      oz           Ø=ø
utf8 : utf8_general_ci             O=o=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö        oe          oz
utf8 : utf8_general_mysql500_ci    O=o=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö        oe          oz
utf8 : utf8_german2_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=ò=ó=ó=ô=õ          oe=Ö=ö=Œ=œ  oz           Ø=ø
utf8 : utf8_hungarian_ci           O=o=º=Ò=Ó=Ó=Ô=Õ=ò=ó=ó=ô=õ          oe=Œ=œ      oz  Ö=ö      Ø=ø
utf8 : utf8_icelandic_ci           O=o=º=Ò=Ô=Õ=ò=ô=õ                  oe=Œ=œ      oz  Ó=Ó=ó=ó
utf8 : utf8_latvian_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_lithuanian_ci          O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_persian_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_polish_ci              O=o=º=Ò=Ô=Õ=Ö=ò=ô=õ=ö              oe=Œ=œ      oz  Ó=Ó=ó=ó  Ø=ø
utf8 : utf8_roman_ci               O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_romanian_ci            O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_sinhala_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_slovak_ci              O=o=º=Ò=Ó=Ó=Õ=Ö=ò=ó=ó=õ=ö          oe=Œ=œ      oz  Ô=ô      Ø=ø
utf8 : utf8_slovenian_ci           O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_spanish2_ci            O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_spanish_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_swedish_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=ò=ó=ó=ô=õ          oe=Œ=œ      oz
utf8 : utf8_turkish_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=ò=ó=ó=ô=õ          oe=Œ=œ      oz  Ö=ö      Ø=ø
utf8 : utf8_unicode_520_ci         O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=Ø=ò=ó=ó=ô=õ=ö=ø  oe=Œ=œ      oz
utf8 : utf8_unicode_ci             O=o=º=Ò=Ó=Ó=Ô=Õ=Ö=ò=ó=ó=ô=õ=ö      oe=Œ=œ      oz           Ø=ø
utf8 : utf8_vietnamese_ci          O=o=º=Ò=Ó=Ó=Õ=Ö=ò=ó=ó=õ=ö          oe=Œ=œ      oz  Ô=ô      Ø=ø

它表示,对于大多数排序规则,ö被视为与o相同。但是,hungarian_ci和turkish_ci排序ö,好像它是op之间的字母。而且german2_ci认为它等于oeœ。对于danish_ci,icelandic_ci和swedish_ci,它出现在z之后。

More collations details