从拉丁字符集转换为unicode

时间:2013-11-22 22:23:59

标签: php mysql unicode latin

我正在尝试将字符集从latin1更改为utf8

问题:密码不适用于法语字符。密码适用于特殊字符(如引号,括号,美元符号等)。如果我将代码部分中的字符集转换回latin1,我可以使用法语字符登录,但不能使用utf8

到目前为止我做了什么:

  • 更改了数据库的字符集;我可以看到所有列类型 显示为utf8。我在数据库和运行时都运行了查询 表级别。
  • 将代码部分的字符集更改为utf8。
  • 我的测试显示一切都很酷,我可以看到重音法语字符 很好,似乎什么都没破。它只适用于密码 给我提出问题。

请建议:

  • 我是否还需要将数据本身更改为utf8?
  • 我运行了alter table命令,它将列字符集更改为 utf8,我在这里错过了什么吗?

我怀疑这可能是原因,因为如果我将代码部分转换为latin1,密码工作正常。因此我认为代码和数据库是latin1,因此它可以识别特殊字符,但是当我将其更改为utf8时,它无法解释特殊的法语字母,因为它们最初存储为latin1。

PHP和MySQL版本都是最新版本。

由于我的答复很长,我决定在此处添加:

散列函数非常复杂,它使用md5,encode64和crypt函数的组合。我注意到拉丁和unicode产生的pwd不同。这就是原因,我怀疑先前使用latin1生成的pwd可以匹配pwd,而不是转换后的unicode。同样,它只发生在法语字母上,而不是ascii范围为0到127.我不知道如何处理现有用户可以成功登录的情况,并将char集更改为unicode-8。我不能使用iconv(),因为我无法区分密码是使用latin1还是unicode8创建的。除了更改数据库之外,我还需要更改数据吗?如果我正在思考,那么将数据转换为unicode8也可以处理法语字符?

1 个答案:

答案 0 :(得分:-1)

如果您需要将char从某些Unicode转换为另一个 你可以使用这个功能

iconv()