“Ü»ñÏ»ñ ¨ Ý»ñϳÝÛáõûñ “
我将亚美尼亚文本存储在我的数据库中.我试过使用许多不同的字符集,但我仍然无法解决我的问题.
我应该使用什么类型的字符集?
数据存储在varchar中.
我使用当前的配置进行连接:
'sqlsrv' => [ 'driver' => 'sqlsrv','host' => env('MS_DB_HOST','localhost'),'port' => env('MS_DB_PORT','1433'),'database' => env('MS_DB_DATABASE','forge'),'username' => env('MS_DB_USERname','password' => env('MS_DB_PASSWORD',''),'charset' => 'utf8','collation' => 'utf8_bin','prefix' => '' ],
@@版本的sql数据库:
Microsoft sql Server 2008 R2(SP1) – 10.50.2500.0(X64)
2011年6月17日00:54:03
版权所有(c)Microsoft Corporation
windows NT 6.1上的标准版(64位)(Build 7601:Service Pack 1)
Table screenshot
select c.name,t.name,c.collation_name from sys.columns c join sys.types t on c.system_type_ID = t.system_type_ID where object_ID = object_ID('VMATERIALS')
和
select c.name,c.collation_name from test.sys.columns c join sys.types t on c.system_type_ID = t.system_type_ID where object_ID = object_ID('VMATERIALS')
Query result
在我的MSsql数据库中,我有程序:
CREATE FUNCTION asf_ConvertANSIToUnicode (@Source varchar(500)) RETURNS nvarchar(500) ASBEGINDECLARE @Result nvarchar(500)DECLARE @i bigintDECLARE @CharCode bigintDECLARE @Diff bigintSET @i = 1SET @Result = ''While @i <= LEN(@Source) Begin SET @CharCode = ASCII(SUBSTRING(@Source,@i,1)) IF @CharCode<128 SET @CharCode = @CharCode ELSE IF @CharCode between 178 and 253 begin SET @Diff = @CharCode - 178 IF @CharCode % 2 = 0 SET @CharCode = 1329 + @Diff / 2 ELSE SET @CharCode = 1377 + (@Diff-1) / 2 END ELSE SET @CharCode = CASE @CharCode When 162 Then 1415 When 163 Then 1417 When 164 Then 41 When 165 Then 40 When 166 Then 187 When 167 Then 171 When 168 Then 8212 When 169 Then 46 When 170 Then 1373 When 171 Then 44 When 172 Then 45 When 173 Then 1418 When 174 Then 8230 When 175 Then 1372 When 176 Then 1371 When 177 Then 1374 When 254 Then 1370 ELSE @CharCode END SET @Result = @Result + nchar(@CharCode) SET @i = @i + 1 END RETURN @ResultEND
和
CREATE FUNCTION asfe_ConvertANSIToUnicode (@Source varchar(500)) RETURNS nvarchar(500) ASBEGIN RETURN dbo.asf_ConvertANSIToUnicode (@Source)END
如果它可以帮助我,我如何在查询中使用它?
任何帮助将受到高度赞赏.
解决方法 在我的情况下,我是数据库,我有将ansi转换为unicode的功能:CREATE FUNCTION asf_ConvertANSIToUnicode (@Source varchar(500)) RETURNS nvarchar(500) ASBEGINDECLARE @Result nvarchar(500)DECLARE @i bigintDECLARE @CharCode bigintDECLARE @Diff bigintSET @i = 1SET @Result = ''While @i <= LEN(@Source) Begin SET @CharCode = ASCII(SUBSTRING(@Source,1)) IF @CharCode<128 SET @CharCode = @CharCode ELSE IF @CharCode between 178 and 253 begin SET @Diff = @CharCode - 178 IF @CharCode % 2 = 0 SET @CharCode = 1329 + @Diff / 2 ELSE SET @CharCode = 1377 + (@Diff-1) / 2 END ELSE SET @CharCode = CASE @CharCode When 162 Then 1415 When 163 Then 1417 When 164 Then 41 When 165 Then 40 When 166 Then 187 When 167 Then 171 When 168 Then 8212 When 169 Then 46 When 170 Then 1373 When 171 Then 44 When 172 Then 45 When 173 Then 1418 When 174 Then 8230 When 175 Then 1372 When 176 Then 1371 When 177 Then 1374 When 254 Then 1370 ELSE @CharCode END SET @Result = @Result + nchar(@CharCode) SET @i = @i + 1 END RETURN @ResultEND
所以,我只是使用它并以这种方式使用unicode charset获取数据:
\DB::connection('sqlsrv')->select('SELECT test.dbo.asf_ConvertANSIToUnicode(a.MTname) FROM test.dbo.VMATERIALS a;');
在我的数据库设置中,我使用了这个配置:
'sqlsrv' => [ 'driver' => 'sqlsrv','prefix' => '',],
谢谢大家.
总结以上是内存溢出为你收集整理的php – 如何从Laravel MSSQL数据库中读取亚美尼亚文本全部内容,希望文章能够帮你解决php – 如何从Laravel MSSQL数据库中读取亚美尼亚文本所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)