首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最后用符号�输出俄语中的一些SQL数据。

最后用符号�输出俄语中的一些SQL数据。
EN

Stack Overflow用户
提问于 2016-01-23 08:17:38
回答 4查看 201关注 0票数 0

我在从我的MySQL数据库显示俄罗斯数据时遇到了一些问题。背景:其他程序员创建了数据库,我现在负责。

我的问题是:在HTML页面上,输出我的数据库中的语句列表。所有的陈述都是俄罗斯人。在所有的80条语句中,有6条语句的末尾有一个带有白色问号的黑色图标(�)。

常见的事情(!)总是在语句末尾出现问号,语句最长,大约有80个字符.

下面是HTML页面上一些语句的列表:

  • Ядействуюскорееактивно,агрессивнои,думаяосвоейвыгоде
  • Какинтровертныйсвоенравныйчеловек,которыйдемонстрируетмалособственнойин�
  • Являешьсяубедительным,располагающимицелеустремленным
  • Ядемонстрируюразумиясность,объективностьилогику
  • Кого-то,ктосамостоятельномыслитизнает,каксебепомочь
  • Томнеследовалобысдержаннореагироватьинайтидругойпуть,чтобыполучитьбол�

我查看了我的表“语句”中的数据库,发现这些语句被保存为无法识别的字符。例如,上文第二次俄文声明(其末尾包含问号符号)保存的条目如下:

···.

关于表:它的排序规则是utf8_unicode_ci,字段的数据类型为VARCHAR(150)

我的问题:

  1. 为什么在我的表中用这些无法识别的字母保存这些语句?我怎样才能把它们转换成俄文?
  2. 在html输出中出现问号符号的原因是什么?我怎么才能摆脱它?

编辑:

在同一个项目中,我发现了另一个问题,我在另一篇文章中描述了这个问题。也许这个问题和它有关?

PHP: Special char becomes question mark icon in substring

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-23 09:06:59

这听起来像是一个简单的截断问题。Varchar( 150 )说字段是最大的150字节。UTF8每个符号可以使用多个字节--例如,cyrillic中的每个字母将使用2个字节,而空格或逗号符号将使用1个字节。因此,如果字符串长度超过150个字节,则有可能在中间截断西里尔字母。例如,在您的第二句话中,小и有utf8代码d0 b8,但是被截断为d0,这是不可打印的符号,因此您可以看到?。对此你无能为力,数据已经丢失了。您只能通过从字符串末尾移除C2..DF范围内的独立字节来美化显示。

至于你看到的身份不明的信件,有很多因素。数据库编码、连接编码、表排序规则和显示编码--如果您使用的是web接口--都是造成混乱的原因,在您看到字符串之前,可能会有多个重新编码。数据也有可能在插入时以某种方式被重新编码,并在显示前解码--这并不是我在遗留代码中看到的最糟糕的东西。你必须自己试验并找到合适的组合。

票数 0
EN

Stack Overflow用户

发布于 2016-01-23 08:39:22

在插入时利用'SET names=utf8'查询,问题是在输入(插入)时,数据被转换成一些特殊的字符。

所以如果你用俄语输入的数据,同样的数据也会被添加到数据库中。在检索过程中,您将得到与您输入的结果相同的结果。

票数 1
EN

Stack Overflow用户

发布于 2016-01-23 08:32:56

使用mbstring可以更改编码http://php.net/manual/en/book.mbstring.php

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34961209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档