首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用CodeIgniter在Server数据库中存储多字节字符

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

Stack Overflow用户
提问于 2012-02-07 15:19:44
回答 5查看 17.2K关注 0票数 7

我正在使用带有活动记录的MS和CodeIgniter 2进行我正在进行的项目,我只是偶然发现了这个问题:

当我提交一个包含中文或印地语字符的表单时,我把它存储在一个表格中,当我查看它时,我得到的都是问号。如果我尝试英语或希腊语字符,一切似乎都很好。

我认为这与我正在编写的PHP有关,因为如果我将中文文本直接复制到中,那么所有的值都会在Studio和web应用程序上完美地存储和显示。

以下是我使用的db设置:

代码语言:javascript
运行
复制
$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;

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

代码语言:javascript
运行
复制
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中的字符集编码

代码语言:javascript
运行
复制
$config['charset'] = 'utf-8';

新的故障诊断数据

我试图通过表单保存以下字符串:I t rn tiàliz ti n

CodeIgniter回答了这个错误:

代码语言:javascript
运行
复制
An error occurred translating the query string to UTF-16: No mapping for the Unicode character exists in the target multi-byte code page. .

当我试图预先存储汉字时,不会出现这种情况:)

EN

回答 5

Stack Overflow用户

发布于 2012-11-23 19:41:22

在插入到db之前,尝试用iconv()将输入转换为db:

代码语言:javascript
运行
复制
$input = iconv('','UTF-8',$str);
票数 9
EN

Stack Overflow用户

发布于 2012-02-14 10:56:18

从PHP处理Microsoft SQL Server中的编码可能会非常痛苦。(SQLSRV)的1.1版包含了CharacterSet选项,因此,您使用的是不支持设置ChracterSet的过时版本,尽管这不太可能。将char_set更改为UTF-16不是一个选项,因为SQLSRV只支持UTF-8。

更有可能出现以下情况之一:

  • 在您的php.ini中,选项default_charset没有设置为UTF-8。
  • 因为您可能在Windows机器上工作,所以..php文件没有在UTF-8中编码。

如果这不能解决问题,那么您的输入可能包含一个或多个字符,这些字符是无效的UTF-8。在本例中,尝试使用iconv()转换(用户)输入。

编辑:关于@Markus注释:CodeIgniter的driver.php看起来像是sqlsrv-命令的简单包装器,因此这个问题不太可能是由CodeIgniter代码引起的。

票数 3
EN

Stack Overflow用户

发布于 2015-08-23 12:53:52

我有一个错误:

错误号: IMSSP

将查询字符串翻译为UTF-16: No hay ninguna asignación en la página de códigos de múltiples字节de destino para carácter Unicode发生错误。。

对我来说,我的工作是:

代码语言:javascript
运行
复制
iconv('','utf-8',$pass);

在对DB执行查询之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9178795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档