该系统是一个访问 MySQL 数据库的 PHP 应用程序。第一个表是使用标准 latin1 编码创建的,并通过 PHP 中的 mysqli 填充,没有设置任何编码。PHP 脚本和数据都以 UTF-8 工作。
较新的表已将编码设置为 utf8_bin 并在每个事务之前SET CHARACTER SET utf8
发送。
如果我查看 mysql 数据库中较新的表(通过像 HeidiSQL 这样的 sql 资源管理器),每个特殊字符都会正确显示。但是,在每个较旧的表中,典型的 latin1-utf8 错误都是可见的,例如 Ãœ for ü。
有没有一种简单的方法可以通过以下方式之一解决此问题:
- 修复每个表的编码,以便在 sql 资源管理器中正确显示,但保持 PHP 代码不变(在每个语句之前
SET CHARACTER SET utf8
或latin1
在每个语句之前,适合表编码。(只是一种解决方法) - 将所有表的编码切换为 utf8 -> 现在
SET CHARACTER SET utf8
必须在每个 mysqli 连接开始时发送(或者也许有办法将其设置为标准?) - 将所有表的编码切换为 latin1 -> 不再需要
SET CHARACTER SET utf8
在事务前面发送,但在数据库资源管理器中编码错误。
似乎数据库将所有表都作为 utf8 并显示 latin1 表,因此字符错误。如果没有不同,Mysqli 将所有表都视为 latin1。
该应用程序是高效的,编码问题对用户来说是不可见的,因为正确的编码在每条语句之前都被告知 mysqli。但我觉得这不是一个好习惯。
我认识到数据库的设置方式存在问题,我希望了解解决此问题的最佳实践。