Questions tagged «unicode»

2
如何创建Unicode参数和变量名
所有这些工作: CREATE DATABASE [¯\_(ツ)_/¯]; GO USE [¯\_(ツ)_/¯]; GO CREATE SCHEMA [¯\_(ツ)_/¯]; GO CREATE TABLE [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯] NVARCHAR(20)); GO CREATE UNIQUE CLUSTERED INDEX [¯\_(ツ)_/¯] ON [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]); GO INSERT INTO [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]) VALUES (N'[¯\_(ツ)_/¯]'); GO CREATE VIEW [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]; GO CREATE PROC [¯\_(ツ)_/¯].[sp_¯\_(ツ)_/¯] @Shrug NVARCHAR(20) AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] …

1
如何将SQL Server Unicode / NVARCHAR字符串设置为表情符号或补充字符?
我想根据其Unicode代码点将Unicode字符串变量设置为特定字符。 我想使用65535以上的代码点,但是SQL Server 2008 R2数据库的排序规则为SQL_Latin1_General_CP1_CI_AS。 根据Microsoft的NCHAR文档,该NCHAR函数采用一个整数,如下所示: integer_expression 当数据库的排序规则不包含补充字符(SC)标志时,这是一个从0到65535(0到0xFFFF)的正整数。如果指定的值超出此范围,则返回NULL。有关补充字符的更多信息,请参见排序规则和Unicode支持。 当数据库的排序规则支持补充字符(SC)标志时,这是一个从0到1114111(从0到0x10FFFF)的正整数。如果指定的值超出此范围,则返回NULL。 所以这段代码: SELECT NCHAR(128512); NULL在此数据库中返回。 我希望它返回与此相同的内容: SELECT N'😀'; 在排序规则“不包含补充字符(SC)标志”的数据库中,如何使用代码(不使用实际的表情符号字符)将Unicode字符串变量(例如nvarchar)设置为表情符号? 表情符号Unicode代码点的完整列表 (最终,我希望任何角色都能正常工作。为了方便参考,我只是选择了表情符号。) (尽管服务器是SQL Server 2008 R2,但我也对以后版本的任何解决方案感到好奇。) 假设没有办法,是否可以在另一个具有适当排序规则的数据库中引用内联用户定义函数? 如何找到带有“ supplementary character”标志的排序规则? 这不会在我们的服务器上返回任何记录: SELECT * FROM sys.fn_helpcollations() WHERE name LIKE 'SQL%[_]SC'; 似乎引入了SQL Server 2012 Latin1_General_100_CI_AS_SC可以正常工作。您可以在较旧的实例上安装排序规则吗? 整理参考: 在SQL Server中,char,nchar,varchar和nvarchar有什么区别? Microsoft的补充字符归类信息 Microsoft的SQL Server 2008 R2排序规则列表 是否有解释说明为什么SQL Server不管排序规则如何都可以理解和处理扩展字符(除了从角度来看之外)NCHAR?

1
为什么搜索LIKE N'% %'匹配任何Unicode字符而=N' '匹配很多呢?
DECLARE @T TABLE( Col NCHAR(1)); INSERT INTO @T VALUES (N'A'), (N'B'), (N'C'), (N'Ƕ'), (N'Ƿ'), (N'Ǹ'); SELECT * FROM @T WHERE Col LIKE N'%�%' 退货 Col A B C Ƕ Ƿ Ǹ SELECT * FROM @T WHERE Col = N'�' 退货 Col Ƕ Ƿ Ǹ 使用下面的代码生成每个可能的双字节“字符”表明,该=版本与它们中的21,229个以及LIKE N'%�%'所有版本中的匹配(我尝试了一些具有相同结果的非二进制排序规则)。 WITH T(I, N) AS …

2
为什么这些字符在SQL Server中都相等?
我就是不明白。请参阅以下SQL查询: select nchar(65217) -- ﻁ select nchar(65218) -- ﻂ select nchar(65219) -- ﻃ select nchar(65220) -- ﻄ if nchar(65217) = nchar(65218) print 'equal' if nchar(65217) = nchar(65219) print 'equal' if nchar(65217) = nchar(65220) print 'equal' 基于传递关系,这意味着SQL Server会将它们全部视为相同的字符。 但是,在其他环境中(例如C#),它们是不同的。 我感到困惑的是: 字符串比较如何在SQL Server中工作 为什么比较在一台计算机和一个平台上的表现不一样,但是环境不同 这四个字符代表一个人类可理解的字符。为什么它们在Unicode字符图中如此丰富? 当然,这会导致巨大的问题,因为我正在处理文本处理应用程序,并且数据几乎来自任何地方,因此我需要在处理文本之前对其进行规范化。 如果我知道差异的原因,我可能会找到解决方案。谢谢。

2
口音敏感排序
为什么这两个SELECT语句导致排序顺序不同? USE tempdb; CREATE TABLE dbo.OddSort ( id INT IDENTITY(1,1) PRIMARY KEY , col1 NVARCHAR(2) , col2 NVARCHAR(2) ); GO INSERT dbo.OddSort (col1, col2) VALUES (N'e', N'eA') , (N'é', N'éB') , (N'ë', N'ëC') , (N'è', N'èD') , (N'ê', N'êE') , (N'ē', N'ēF'); GO SELECT * FROM dbo.OddSort ORDER BY col1 …


4
为什么varchar数据类型允许unicode值?
我有一个带有varchar列的表。允许使用商标(™),版权(©)和其他Unicode字符,如下所示。 Create table VarcharUnicodeCheck ( col1 varchar(100) ) insert into VarcharUnicodeCheck (col1) values ('MyCompany') insert into VarcharUnicodeCheck (col1) values ('MyCompany™') insert into VarcharUnicodeCheck (col1) values ('MyCompany░') insert into VarcharUnicodeCheck (col1) values ('MyCompanyï') insert into VarcharUnicodeCheck (col1) values ('MyCompany') select * from VarcharUnicodeCheck 但是varchar的定义说,它允许非Unicode字符串数据。但是Trademark(™)和Registered(®)符号是Unicode字符。该定义是否与varchar数据类型的属性相矛盾?我读了几个链接,例如第一个和第二个。但是,当定义说它仅允许非Unicode字符串值时,我仍然不明白为什么它允许Unicode字符串。



4
检测NVARCHAR列中的任何值是否实际上是unicode
我继承了一些SQL Server数据库。SQL Server 2014 Standard的源数据库(我称为“ Q”)中有一张表(我称为“ G”),约有8670万行,宽41列,可将ETL转换为在SQL Server 2008 R2 Standard上具有相同表名的目标数据库(我称其为“ P”)。 即[Q]。[G] ---> [P]。[G] 编辑:3/20/2017:有人问源表是否是目标表的唯一源。是的,这是唯一的来源。就ETL而言,没有任何真正的变化发生。它实际上是源数据的1:1副本。因此,没有计划向此目标表添加其他源。 [Q]。[G]中的一半以上的列是VARCHAR(源表): 列中的13个是VARCHAR(80) 9列是VARCHAR(30) 列中的2个是VARCHAR(8)。 同样,[P]。[G]中的相同列是NVARCHAR(目标表),具有相同宽度的相同列数。(换句话说,长度相同,但为NVARCHAR)。 列中的13个是NVARCHAR(80) 9列是NVARCHAR(30) 列中的2个是NVARCHAR(8)。 这不是我的设计。 我想更改[P]。[G](目标)列数据类型,从NVARCHAR到VARCHAR。我想安全地做到这一点(不会因转换而丢失数据)。 如何查看目标表中每个NVARCHAR列中的数据值,以确认该列是否实际包含任何Unicode数据? 可以检查每个NVARCHAR列的每个值(循环吗?)并告诉我其中的任何值是否为Unicode的查询(DMVs?)是理想的解决方案,但欢迎使用其他方法。

1
从Postgres查询非ASCII行
是否[:ascii:]在所有的Postgres类的工作?在他们的帮助中没有列出它,但是我在网络上看到一些利用它的示例。 我有一个UTF-8数据库,其中归类和c_typ e是en_US.UTF-8,而Postgres版本是9.6.2。当我搜索这样的非ASCII行时: select title from wallabag_entry where title ~ '[^[:ascii:]]'; 我同时获得了 Unicode和非Unicode符号(完整的输出在): Сталинская правозащитница: мать Меленкова бабушка Настя Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте? Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев Как комиссар Крекшин в 1740-е чуть не отменил историю России …

2
何时将nvarchar / nchar与SQL Server 2019一起使用?
在SQL Server 2019中,Microsoft引入了对和数据类型的UTF-8支持,并说:CHARVARCHAR 根据使用的字符集,此功能可以节省大量存储空间。例如,使用启用了UTF-8的排序规则将具有ASCII字符串的现有列数据类型从NCHAR(10)更改为CHAR(10),可将存储需求减少近50%。这种减少是因为NCHAR(10)需要22个字节来存储,而CHAR(10)对于相同的Unicode字符串则需要12个字节。 UTF-8似乎支持每个脚本,因此基本上我们可以开始在varchar和char列中存储Unicode数据。就像文档中所说的那样,这可以减少表和索引的大小,并且由于读取的数据量更少,因此可以得到更好的性能。 我想知道这是不是意味着我们可以停止使用nvarchar和nchar列,它实现UTF-16? 谁能指出一个方案和理由,不使用带UTF编码的char数据类型并继续使用n-chars类型?

2
为什么Oracle为补充unicode字符Chipmunk使用与Java不同的字节长度?
我有Java代码将UTF-8字符串修整为我的Oracle(11.2.0.4.0)列的大小,由于Java和Oracle将字符串视为不同的字节长度,最终引发了错误。我已经验证我NLS_CHARACTERSET在Oracle中的参数是“ UTF8”。 我编写了一个使用Unicode花栗鼠表情符号(🐿️)在下面说明我的问题的测试 public void test() throws UnsupportedEncodingException, SQLException { String squirrel = "\uD83D\uDC3F\uFE0F"; int squirrelByteLength = squirrel.getBytes("UTF-8").length; //this is 7 Connection connection = dataSource.getConnection(); connection.prepareStatement("drop table temp").execute(); connection.prepareStatement("create table temp (foo varchar2(" + String.valueOf(squirrelByteLength) + "))").execute(); PreparedStatement statement = connection.prepareStatement("insert into temp (foo) values (?)"); statement.setString(1, squirrel); statement.executeUpdate(); } …
8 oracle  java  utf-8  unicode 

2
将Unicode转换为非Unicode /将NVARCHAR转换为VARCHAR时自动翻译
Unicode代码点9619是一个称为“深色阴影”的字符:▓(http://unicode-table.com/en/search/?q=9619)。 使用SQL_Latin1_General_CP1_CI_AS归类和1252代码页,我希望将Unicode字符转换/转换为非Unicode数据类型将导致出现问号(?),因为代码页1252似乎不包含此字符,并且这似乎是SQL Server的无法进行转换时的行为。 所以我的问题是:为什么SQL Server将此字符转换为ASCII代码166,即“管道,竖线损坏”:¦? SELECT NCHAR(9619), CAST(NCHAR(9619) AS CHAR(1)), ASCII(CAST(NCHAR(9619) AS CHAR(1)))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.