sybase 中的编码问题 php

encoding issue in sybase to php

首先让我说,我有一个 sybase 数据库,它的字符集绝对不是 utf-8.and 我不能将它更改为 utf-8 因为一些其他问题。

所以问题是我需要使用 php 从这个数据库中读取数据并将其保存到 mysql table 即 utf8.

所以通常没有任何转换,值在我的数据库中保存为

//sybase query
$result= someFuntionToReturnSybaseData();
//the $result is a multidimensional array
echo $result[0]['somevalue']; //19’’ long bla bla

如果我尝试使用默认字符集将其插入 mysql table,该值将保存为 "19?? long bla bla"

在浏览器中显示为"19Â’Â’ long bla bla"

是否可以将 "19’’ long bla bla" 原样保存在 mysql table 中并在每个地方正确显示

我试过了

utf8_encode($result[0]['somevalue']);
iconv();

但是乱码出现较多

请不要告诉我到处使用字符集,就像我不能那样做一样

Sybase 字符集 iso_1 对于 MySQL (https://www.connectionstrings.com/ase-unsupported-charset/)

似乎是 iso-8859-1

在导入数据之前,您可以使用mysl命令SET NAMES指定您发送到MySQL的字符

SET NAMES 'iso-8859-1';

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

首先,您需要从 sybase 获取数据并将其转换为 UTF-8,以便您可以将其上传到 MySQL:

$resultInISO = someFuntionToReturnSybaseData();//ISO-8859-1
$resultInUTF8 = mb_convert_encoding($resultInISO,"UTF-8","ISO-8859-1");
//now it's in UTF8, you can insert it into MySQL

http://php.net/manual/en/function.mb-convert-encoding.php

让我知道这是否适合你。

快速解决方案在这里:

Detect encoding and make everything UTF-8

根据那篇文章你需要的源代码在这里:

https://github.com/neitanod/forceutf8

但是,如果您需要比我们更简单的东西,我们需要讨论从 db 到您的代码行数据传递的完整路径。

你能展示一些FuntionToReturnSybaseData() 的源代码吗?

我们可以更改该功能吗?或者你只是按原样称呼它?

db的原始codepage是什么?

您是否有其他网页适用于此 sybase 数据库?

这些页面的代码页设置是什么?

你的 mysql db table 结构是什么?

你能为 mysql 显示 CREATE TABLE 语句吗?

以及您尝试插入数据的代码?

最后一个问题,但确实不是您应该忽略的问题:

你的 php 文件代码页是什么?

(我有开发西里尔文网站的经验,并且在很多情况下原始 .php 文件代码页损坏了结果输出:-))