php - 如何使用 CodeIgniter 在 SQL Server 数据库中存储多字节字符

标签 php sql-server-2008 unicode codeigniter-2

我正在将 MS SQL Server 和 CodeIgniter 2 与 Active Record 一起用于我正在处理的项目,我偶然发现了这个问题:

当我提交包含中文或印地语字符的表单时,我将它存储在一个表中,当我查看它时,我得到的只是问号。如果我尝试使用英语或希腊字符,似乎一切正常。

我认为这与我正在编写的 PHP 有关的原因是,如果我直接在 SQL Server Management Studio 中复制粘贴中文文本,所有值都会在 SQL Studio 上完美存储和显示, 和网络应用程序。

这些是我正在使用的数据库设置:

$db['local']['dbdriver'] = 'sqlsrv';
$db['local']['dbprefix'] = '';
$db['local']['pconnect'] = FALSE;
$db['local']['db_debug'] = TRUE;
$db['local']['cache_on'] = FALSE;
$db['local']['cachedir'] = '';
$db['local']['char_set'] = 'utf8';
$db['local']['dbcollat'] = 'utf8_general_ci';
$db['local']['swap_pre'] = '';
$db['local']['autoinit'] = TRUE;
$db['local']['stricton'] = FALSE;

这是我现在正在测试的表的结构:

CREATE TABLE [dbo].[languages](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [language] [nvarchar](1024) NULL,
    [language_local] [nvarchar](1024) NULL,
    [lang_code] [nvarchar](100) NULL,
    [core] [bit] NULL,
 CONSTRAINT [PK_languages] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,         ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

这是我在 config.php 中的字符集编码

$config['charset'] = 'utf-8';

新的故障排除数据

我试图通过我的表单保存以下字符串:Iñtërnâtiônàlizætiøn

CodeIgniter 回复了这个错误:

An error occurred translating the query string to UTF-16: No mapping for the Unicode character exists in the target multi-byte code page. .

我尝试存储汉字时没有出现 提前谢谢你:)

最佳答案

尝试在插入到数据库之前使用 iconv() 转换您的输入:

$input = iconv('','UTF-8',$str);

关于php - 如何使用 CodeIgniter 在 SQL Server 数据库中存储多字节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178795/

相关文章:

php - 图片无法直接上传到相册

sql - 是否可以有一个由子选择定义的动态选择子句列?

sql - 为什么 SQL Server 在处理半表情符号时表现不一致?

php - Laravel 子域在重定向时丢失 session

php - MySQL获取值并使用它们计算百分比

php - 创建可折叠 print_r() var_dump() 的函数?

mysql - SQL Server 在 Drop 上抛出错误

mysql - 重复和无序的数字

java - 使用 java Runtime.exec 的 Windows xcopy 不适用于带有中文字符的文件名

pdf - PDF 文件是否有一个字段指定其编码?