我正在使用PHPExcel将电子表格转换为数据库,并且单元格值恰好包含俄语。如果我运行mb_detect_encoding(),我被告知文本是UTF8,如果我设置了UTF8的标题,那么我会看到正确的俄语字符。
但是,如果我将其编译成一个字符串(在该过程中只涉及addslashes)并将其插入表中,我会看到很多????。我将表字符集设置为utf8mb4,并将整理设置为utf8mb4_general_ci。我还运行$ this-> db-> query(“SET NAMES'utf8mb4'”);在我的数据库连接上。
我用我的多部分插入运行PDO query()并获取???但是如果我将查询输出到屏幕,我得到ПоÑ这将是有效的UTF8。为什么这不能正确存储在数据库中?
答案 0 :(得分:0)
我保留了这个问题而不是删除它,所以有人可能会觉得答案有用。
我之所以挣扎,是因为在SQLYog中,默认情况下它并没有显示Charset列。有一个选项可以读取"隐藏语言选项"在Alter表视图中,它将显示当SQLyog创建表时,它使用默认服务器Charset,而不是您定义Charset表所使用的。我不确定这是否正确 - 但解决方案只是打开Column Charset设置并检查它们是否符合您的预期。
答案 1 :(得分:0)
По
是По
的Mojibake。大概...
SET NAMES latin1
(或set_charset('latin1')
或...)相关联。 (应该是utf8
。)CHARACTER SET utf8
,也可能不是SET NAMES latin1
,但应该是这样。问号暗示......
CHARACTER SET latin1
生效(默认,但错误)SELECT col, HEX(col) FROM tbl WHERE ...
(默认,但错误)帮助诊断问题的一种方法是运行
По
对于D09FD0BE
,十六进制应为D0xx
。 utf8中的每个西里尔字符都是十六进制{{1}}。