- 73
- -1
首先看一下freeTDS配置:## 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 = 8.0 # 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 # To reduce data sent from server for BLOBs (like TEXT or # IMAGE) try setting 'text size' to a reasonable limit; text size = 64512 # If you experience TLS handshake errors and are using openssl, # try adjusting the cipher list (don't surround in double or single quotes) # openssl ciphers = HIGH:!SSLv2:!aNULL:-DH# A typical Sybase server[egServer50] host = symachine.domain.com port = 5000 tds version = 5.0# A typical Microsoft server[SqlServer] host = 10.30.16.14 port = 1433 tds version = 8.0 client charset = UTF-8再看看 ODBC:[ODBC Data Sources]ppc= ppc sql server[SqlServer]Driver = FREETDSDescription = ppc sql serverTrace = NoServername = SqlServerDatabase = medexmemrs再看看代码:try { $conn = new PDO("odbc:SqlServer", "sa", "sa"); $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $conn->setAttribute(PDO::ODBC_ATTR_ASSUME_UTF8, true); } catch (PDOException $e) { log_message('error', '数据库连接失败:'.$e->getMessage(), 'get_pacs_img'); exit; } $sql = "select * from dbo.TJ_Report where status = '已检查' and union_request_no = '$request_no'"; log_message('debug', '[union_request_no]:'.$request_no.'; 查询SQL: '.$sql, 'get_pacs_img'); $query = $conn->query($sql); $pacs_data = $query->fetch(); if(! $pacs_data) { return []; } var_dump($pacs_data);显示结果:array(19) { ["cust_name"]=> string(6) "��^^t" ["status"]=> string(9) "已检�" ["sa"]=> string(24) "TJ2111220019" ["laiyuan"]=> string(8) "SO�h-N�_" ["studyclass0"]=> string(11) "CT核磁�" ["patient_id"]=> string(0) "" ["union_request_no"]=> string(26) "2111220019323" ["union_code"]=> string(0) "" ["union_name"]=> string(0) "" ["examiner_id"]=> string(10) "01113" ["examiner_name"]=> string(0) "" ["examiner_time"]=> string(23) "2021-11-22 14:48:52.000" ["reviewer_id"]=> string(10) "01113" ["reviewer_name"]=> string(4) "Ng�e" ["reviewer_time"]=> string(23) "2021-11-22 16:46:36.077" ["check_desc"]=> string(317) "采用5mm层厚作横轴位从肺尖至肺底连续扫描示:两肺纹理分布规则,肺实质内未见明显异常密度影,肺门结构清晰,气管通畅,纵隔结构无移位,气管及大血管形态、大小正常,间隙清晰,未见异常肿块及肿大淋巴结。胸腔未见积液。" ["check_conclusion"]=> string(38) "两肺及纵隔未见明显异常。" ["abnormal_flags"]=> string(6) "正常" ["report_data"]=> string(190) "ftp://10.30.16.14:3030//Report/ImageData/2111221448572662/211122144857266220211122161743801.jpg"}试着使用mb_convert_encoding($pacs_data, 'UTF-8', 'GBK') 结果:array(19) { ["cust_name"]=> string(8) "闂鱚^t" ["status"]=> string(13) "宸叉鏌" ["浣撴鍙"]=> string(24) "TJ2111220019" ["laiyuan"]=> string(10) "SO纇-N胈" ["studyclass0"]=> string(13) "CT鏍哥" ["patient_id"]=> string(0) "" ["union_request_no"]=> string(26) "2111220019323" ["union_code"]=> string(0) "" ["union_name"]=> string(0) "" ["examiner_id"]=> string(10) "01113" ["examiner_name"]=> string(0) "" ["examiner_time"]=> string(23) "2021-11-22 14:48:52.000" ["reviewer_id"]=> string(10) "01113" ["reviewer_name"]=> string(5) "Ng宔" ["reviewer_time"]=> string(23) "2021-11-22 16:46:36.077" ["check_desc"]=> string(470) "閲囩敤5mm灞傚帤浣滄í杞翠綅浠庤偤灏栬嚦鑲哄簳杩炵画鎵弿绀猴細涓よ偤绾圭悊鍒嗗竷瑙勫垯锛岃偤瀹炶川鍐呮湭瑙佹槑鏄惧紓甯稿瘑搴﹀奖锛岃偤闂ㄧ粨鏋勬竻鏅帮紝姘旂閫氱晠锛岀旱闅旂粨鏋勬棤绉讳綅锛屾皵绠″強澶ц绠″舰鎬併€佸ぇ灏忔甯革紝闂撮殭娓呮櫚锛屾湭瑙佸紓甯歌偪鍧楀強鑲垮ぇ娣嬪反缁撱€傝兏鑵旀湭瑙佺Н娑层€" ["check_conclusion"]=> string(56) "涓よ偤鍙婄旱闅旀湭瑙佹槑鏄惧紓甯搞€" ["abnormal_flags"]=> string(9) "姝e父" ["report_data"]=> string(190) "ftp://10.30.16.14:3030//Report/ImageData/2111221448572662/211122144857266220211122161743801.jpg"}MSSQL 排序规则: Chinese_PRC_CI_ASSELECT COLLATIONPROPERTY( 'chinese_prc_ci_as', 'codepage' ); //936不知道各位有没有遇到过! 3>
- 共 -1 条
- 全部回答
-
你让我动心 普通会员 1楼
在使用PHP PDO连接MSSQL数据库时,如果出现中文乱码问题,一般有以下几个解决步骤:
-
数据库字符集设置: 确保你的MSSQL服务器的数据库、表以及字段的字符集都是支持中文的,如UTF-8或者GBK。可以在创建数据库或表时指定字符集,或者修改已存在的数据库、表和字段的字符集。
-
连接时指定字符集: 在PDO连接字符串中指定字符集,例如:
php $dsn = "sqlsrv:Server=your_server;Database=your_database;charset=UTF8"; $dbh = new PDO($dsn, $username, $password);对于sqlsrv驱动,可能需要在查询前执行SQL命令来设置字符集:php $stmt = $dbh->prepare("SET NAMES UTF8"); $stmt->execute(); -
PHP脚本字符集设置: 确保你的PHP脚本文件本身的编码也是UTF-8,并且在输出内容前设置正确的输出字符集:
php header('Content-Type: text/html; charset=utf-8'); -
获取数据时处理字符集: 确保从数据库获取的数据正确解码,特别是在读取二进制数据(BINARY或VARBINARY类型)时,可能需要显式转换为字符串:
php $stmt = $dbh->query("SELECT column FROM table"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo iconv('utf-8', 'gbk', $row['column']); // 根据实际情况选择合适的编码转换方向 }
按照以上步骤通常可以解决PHP PDO连接MSSQL乱码的问题。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部


