你好我买了这个使用sql数据库数据的应用程序代码。英语没有问题,但我需要使用捷克的特殊标志,如č,ř,š,ě,í,é..我可以在CMS中使用这些捷克标志改变数据而没有问题,但在sql数据库中它们是错误的(比如é而不是č),当我改变数据库中的数据时它在CMS中的错误(以不同的方式č是?)而且当然它在Android应用程序中也是错误的,或者因为它不能识别字符集而崩溃。我尝试解决这个问题超过一个月,我已经阅读了这里和谷歌的一切,但仍然不知道问题出在哪里。我甚至手工重建了整个数据库,并为每个表utf8或utf8mb4手动设置。我试图添加到功能
mysql_query("SET NAMES 'utf8mb4'");
或
mysql_query("SET NAMES 'utf8'");
但它没有效果,就像我没有做任何事情一样
我当然将所有php文件更改为utf8或utf8mb4,但错误仍然相同。我对数据库做了同样的事情。
如果我跑
SHOW VARIABLES LIKE '%character%'
我得到了这些结果:
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/percona-server/charsets/
PHP版本5.4.45
感谢您的任何想法或任何帮助。
Update: SHOW CREATE TABLE returned:
category CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`institution_id` int(11) NOT NULL,
`programme_id` varchar(255) COLLATE utf8_bin NOT NULL,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`description` text COLLATE utf8_bin NOT NULL,
`question_time` varchar(255) COLLATE utf8_bin NOT NULL,
`limits` varchar(255) COLLATE utf8_bin NOT NULL,
`correct_ans_score` int(11) NOT NULL,
`wrong_ans_score` int(11) NOT NULL,
`expire_date` varchar(255) COLLATE utf8_bin NOT NULL,
`no_of_days` varchar(255) COLLATE utf8_bin NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
category CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`institution_id` int(11) NOT NULL,
`programme_id` varchar(255) COLLATE utf8_bin NOT NULL,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`description` text COLLATE utf8_bin NOT NULL,
`question_time` varchar(255) COLLATE utf8_bin NOT NULL,
`limits` varchar(255) COLLATE utf8_bin NOT NULL,
`correct_ans_score` int(11) NOT NULL,
`wrong_ans_score` int(11) NOT NULL,
`expire_date` varchar(255) COLLATE utf8_bin NOT NULL,
`no_of_days` varchar(255) COLLATE utf8_bin NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
答案 0 :(得分:0)
谢谢Mees Kluivers,确实有一些信息帮助了我。我将这两行添加到每个PHP文件的开头,现在它在CMS和mysql数据库中都显示正确的字符,因为某些原因android app仍然显示?而不是č,但它在月经处理后仍然向前迈出了一大步。
mysql_query("set names 'utf8'");
mysql_query("set charset 'utf8'");
答案 1 :(得分:0)
转换为mysqli_*
界面后,请使用set_charset('utf8')
功能。
另外,请确保您的列/表已声明为CHARACTER SET utf8
(或utf8mb4)。请提供SHOW CREATE TABLE
。
我很乐意进一步诊断您的问题,但我需要更多信息。 č
变为?
或Ä
或被截断或可能是其他内容。我认为没有办法变成é
,所以我需要更多的线索。