我正在将从MySQL 5编写的PHP应用程序移植到SQLite 3,两者的文本编码都是UTF-8 (适用于所有字段、表和数据库)。我在传输一个有特殊字符的地理数据库时遇到了麻烦。
mb_detect_encoding()检测到两者都是返回UTF-8数据.
例如,
原始输出:
MySQL (正确):Dārāb,伊朗
SQLite (不正确):d r,伊朗
JSON编码:
MySQL (正确):d\0101r\u0101b,伊朗
SQLite (不正确):D\u00c4\u0081r\u00c4\u0081b,伊朗
修复问题的是什么:
$sqlite_output = utf8_encode($sqlite_output);
$sqlite_output = utf8_decode($sqlite_output);我想有一种修复SQLite数据库的方法。提前谢谢你。
发布于 2010-09-29 00:26:49
谢谢你的建议和意见。不幸的是,无论我选择哪种配置,它都不会采取。最后,我简单地启动了两个PDO对象,并使用while循环一次插入一行。(我使用了mysqldump的--no-data选项来获得结构,并手动修改了结构。)
在256 my的CentOS框中插入相当于9.4MB数据的10,000行大约需要10分钟。(因此,如果您所处的环境是共享的,请注意最大的执行时间。)SQLite数据库现在返回正确的Unicode数据。
自我注意:编写工作代码要比找到推荐的解决方案容易得多。
发布于 2010-09-28 19:54:17
您可能需要再次将数据从MySQL传输到SQLite。我不认为您可以预见恢复到正确的编码,因为它似乎SQLite解释utf8 8-输入为非utf8 8或签证反之亦然,当数据第一次到达,因此没有以适当的格式存储它。
因此,再次尝试传输,同时确保MySQL到SQLite之间的整个数据链都知道utf-8编码。
发布于 2010-10-03 19:57:27
默认的PHP发行版以ISO-8859-1编码模式构建libsqlite。然而,这是一个错误的名称;它不是处理ISO-8859-1,而是根据您当前用于字符串比较和排序排序的地区设置来操作。所以,你应该把它看作是‘8位’,而不是ISO-8859-1。
https://stackoverflow.com/questions/3816489
复制相似问题