Reputation: 3322
I'm using a MS SQL Server 2008 with PHP PDO: I have a PHP PDO class that is taking a Windows Character Set and converting data to UTF-8 manually. Something like:
$sql = "SELECT * FROM something_somewhere);
$query = $this->db->query($sql);
$result = $query->fetchAll(PDO::FETCH_OBJ);
foreach ($result as $row) {
foreach (get_object_vars($row) as $key => $value) {
$row->$key = (mb_detect_encoding($value, mb_detect_order(), true) === 'UTF-8')
? $value : iconv('iso-8859-1', 'utf-8', $value);
}
$results[] = $row;
}
iconv() works great, but writing this all of the time is tedious. Is there anyway to configure FreeTDS to convert to UTF-8?
I was reading about the FreeTDS configuration for Moodle at:
https://docs.moodle.org/22/en/FreeTDS
My current /etc/freetds.conf file (not editable, so I'll have to get the admin to change it):
# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 *** Exp $
#
# This file is installed by FreeTDS if no file by the same
# name is found in the installation directory.
#
# For information about the layout of this file and its settings,
# see the freetds.conf manpage "man freetds.conf".
# Global settings are overridden by those in a database
# server specific section
[global]
# TDS protocol version
; tds version = 4.2
# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff
# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
# A typical Sybase server
[egServer50]
host = symachine.domain.com
port = 5000
tds version = 5.0
# A typical Microsoft server
[egServer70]
host = ntmachine.domain.com
port = 1433
tds version = 7.0
I assume I need to edit the [global] settings, adding both:
tds version = 7.0
client charset = UTF-8
Can anyone confirm?
Upvotes: 3
Views: 6051
Reputation: 319
Yes, you need to set UTF in freetds configuration file.
freetds.conf
.client charset = UTF-8
in your connection settings.Upvotes: 7