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 文件代码页损坏了结果输出:-))
首先让我说,我有一个 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 文件代码页损坏了结果输出:-))