本文介绍了使用PHP FreeTDS扩展从MSSQL服务器获取UTF-8字符集的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用FreeTDS扩展名,我似乎无法从编码为UTF-8的MSSQL中获取数据.

I can't seem to get data from MSSQL encoded as UTF-8 using FreeTDS extension.

连接:

ini_set('mssql.charset', 'UTF-8');
$this->_resource = mssql_connect($config['servername'], $config['username'], $config['password']);

我无法使用任何其他扩展名.

I have no ability to use any other extension.

我尝试创建〜/.freetds.conf

I've tried creating ~/.freetds.conf

[global]
client charset = UTF-8

我尝试过将参数传递给php:

I've tried passing parameters to php:

php -d mssql.charset="UTF-8" index.php

数据仍然不在UTF-8中.

Data is still not in UTF-8.

php -i

mssql

MSSQL Support => enabled
Active Persistent Links => 0
Active Links => 0
Library version => FreeTDS

Directive => Local Value => Master Value
mssql.allow_persistent => On => On
mssql.batchsize => 0 => 0
mssql.charset => no value => no value
mssql.compatability_mode => Off => Off
mssql.connect_timeout => 5 => 5
mssql.datetimeconvert => On => On
mssql.max_links => Unlimited => Unlimited
mssql.max_persistent => Unlimited => Unlimited

想法?

推荐答案

MSSQL和UTF-8有时会很痛苦.我不得不手动将其转换.问题是:MSSQL实际上并不知道并不支持UTF-8.

MSSQL and UTF-8 are quite a pain in the ... sometimes. I had to convert it manually.The problem: MSSQL doesn't actually know and support UTF-8.

从数据库值转换为UTF-8:

Convert from database value to UTF-8:

mb_detect_encoding($value, mb_detect_order(), true) === 'UTF-8' ? $value : mb_convert_encoding($value, 'UTF-8');

从UTF-8转换为数据库值:

Converting from UTF-8 to database value:

mb_convert_encoding($value, 'UCS-2LE', mb_detect_encoding($value, mb_detect_order(), true));

幸运的是,我正在使用Doctrine,所以我所要做的就是创建一个自定义StringType实现.

Fortunately I was using Doctrine so all I had was to create a custom StringType implementation.

这篇关于使用PHP FreeTDS扩展从MSSQL服务器获取UTF-8字符集的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 08:23
查看更多