【问题标题】:mysql utf8 character problemmysql utf8 字符问题
【发布时间】:2011-07-12 23:39:40
【问题描述】:

我在页面中将所有字符集设置为“utf8”,在数据库中将所有排序规则(也是字段排序规则)设置为utf8_general_ci,并将此代码添加到connect.php

mysql_set_charset('utf8',$connect);
mysql_query("SET NAMES 'utf8'");

虽然一切都是 utf,但当我运行此查询时:

"SELECT * FROM titles WHERE title='toruń'"

结果:它返回“toruń”和“torun”,它们是不同的词。

那你怎么看?
有什么问题?

谢谢!

编辑:

如果不存在则创建表 titles
(
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
主键 (id),
密钥title (title),

) ENGINE=MyISAM 默认字符集=utf8 AUTO_INCREMENT=37 ;

【问题讨论】:

  • 能不能在phpmyadmin或者mysql命令行中测试一下
  • 转储表架构并将其添加到问题中。

标签: php mysql utf-8 character-encoding


【解决方案1】:

你想要 utf8_bin,*_ci 不区分大小写,所以重音被视为普通字母

【讨论】:

  • 当我将 'title' 的排序规则更改为 utf8_polish_ci 时,我必须更改所有表或字段的排序规则。
【解决方案2】:

问题在于您选择的排序规则旨在忽略特定的重音(并且很可能是一般的重音)。

如果您希望存储一种特定语言,而不是多种不同的语言,请尝试使用utf8_(language)_ci(如果该语言不存在,可能还有另一种与您的语言相似的语言)。否则,您可以尝试使用 Unicode 排序算法的 utf8_unicode_ci,但我不确定它是否能做出这种区分。

您也可以使用utf8_bin,这保证将它们视为不同,但这是以失去不区分大小写为代价的,这很可能更糟。

话虽如此,这不一定是坏事:通过忽略重音,搜索将更加灵活,并且对于无法键入特定字符的人来说更容易使用。

【讨论】:

  • 我正在开发一个波兰网站,但它不是本地的。是的,也许在搜索查询中它很好,但在插入时太糟糕了。因为我的伪代码就像 "if(!exist_in_table('torun')) 然后 create_row("torun")。
【解决方案3】:

尝试使用utf8_encode

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多