我在从我的MySQL数据库显示俄罗斯数据时遇到了一些问题。背景:其他程序员创建了数据库,我现在负责。
我的问题是:在HTML页面上,输出我的数据库中的语句列表。所有的陈述都是俄罗斯人。在所有的80条语句中,有6条语句的末尾有一个带有白色问号的黑色图标(�)。
常见的事情(!)总是在语句末尾出现问号,语句最长,大约有80个字符.。
下面是HTML页面上一些语句的列表:
我查看了我的表“语句”中的数据库,发现这些语句被保存为无法识别的字符。例如,上文第二次俄文声明(其末尾包含问号符号)保存的条目如下:
···.
关于表:它的排序规则是utf8_unicode_ci,字段的数据类型为VARCHAR(150)。
我的问题:
编辑:
在同一个项目中,我发现了另一个问题,我在另一篇文章中描述了这个问题。也许这个问题和它有关?
发布于 2016-01-23 09:06:59
这听起来像是一个简单的截断问题。Varchar( 150 )说字段是最大的150字节。UTF8每个符号可以使用多个字节--例如,cyrillic中的每个字母将使用2个字节,而空格或逗号符号将使用1个字节。因此,如果字符串长度超过150个字节,则有可能在中间截断西里尔字母。例如,在您的第二句话中,小и有utf8代码d0 b8,但是被截断为d0,这是不可打印的符号,因此您可以看到?。对此你无能为力,数据已经丢失了。您只能通过从字符串末尾移除C2..DF范围内的独立字节来美化显示。
至于你看到的身份不明的信件,有很多因素。数据库编码、连接编码、表排序规则和显示编码--如果您使用的是web接口--都是造成混乱的原因,在您看到字符串之前,可能会有多个重新编码。数据也有可能在插入时以某种方式被重新编码,并在显示前解码--这并不是我在遗留代码中看到的最糟糕的东西。你必须自己试验并找到合适的组合。
发布于 2016-01-23 08:39:22
在插入时利用'SET names=utf8'查询,问题是在输入(插入)时,数据被转换成一些特殊的字符。
所以如果你用俄语输入的数据,同样的数据也会被添加到数据库中。在检索过程中,您将得到与您输入的结果相同的结果。
发布于 2016-01-23 08:32:56
使用mbstring可以更改编码http://php.net/manual/en/book.mbstring.php
https://stackoverflow.com/questions/34961209
复制相似问题