我想根据其 Unicode 代码点将 Unicode 字符串变量设置为特定字符。
我想使用 65535 以外的代码点,但 SQL Server 2008 R2 数据库的排序规则为SQL_Latin1_General_CP1_CI_AS
.
根据Microsoft 的 NCHAR 文档,该NCHAR
函数采用如下整数:
整数表达式
当数据库的排序规则不包含补充字符 (SC) 标志时,这是一个从 0 到 65535(0 到 0xFFFF)的正整数。如果指定了超出此范围的值,则返回 NULL。有关补充字符的更多信息,请参阅排序规则和 Unicode 支持。
当数据库的排序规则支持补充字符 (SC) 标志时,这是一个从 0 到 1114111(0 到 0x10FFFF)的正整数。如果指定了超出此范围的值,则返回 NULL。
所以这段代码:
SELECT NCHAR(128512);
Run Code Online (Sandbox Code Playgroud)
NULL
在此数据库中返回。
我希望它返回与此相同的:
SELECT N'';
Run Code Online (Sandbox Code Playgroud)
如何在排序规则“不包含补充字符 (SC) 标志”的数据库中使用代码(不使用实际表情符号字符)将 Unicode 字符串变量(例如 nvarchar)设置为表情符号?
(最终我希望任何角色都能工作。我只是为了便于参考而选择了表情符号。)
(虽然服务器是SQL Server 2008 R2,但我也很好奇以后版本有什么解决方案。)
假设没有办法,我可以在另一个具有适当排序规则的数据库中引用内联用户定义函数吗?
如何找到具有“补充字符”标志的归类?
这在我们的服务器上不返回任何记录:
SELECT * FROM sys.fn_helpcollations()
WHERE name LIKE 'SQL%[_]SC';
Run Code Online (Sandbox Code Playgroud)
似乎引入了 SQL Server …
在我的应用程序中,我使用 C 代码在数据库中插入数据,因为我从不受信任的来源收到的字符串我已经使用PQescapeByteaConn
libpq 库对它们进行了转义。哪个工作得很好,即结果为八位字节格式字符串。看下面的例子,
输入字符串: \n\t\f\b\p\k\j\l\mestPrepared
输出字符串: \\012\\011\\014\\010pkjlmestPrepared
输出字符串被插入到数据库中。现在,我使用 JDBC 从 Java 代码中的数据库中检索该数据。如何将字符串转义回其原始值?
我想到了两种可能的方法,
我可以理解方法 1 会更有效。我已经尝试了这里列出的几乎所有功能,但没有任何效果。请帮忙!!
我在 linux 机器上使用 8.4 版的 postgres。
我正在尝试运行sqlcmd.exe以便从命令行设置新数据库。我在 Windows 7 64 位上使用 SQL SERVER Express 2012。
这是我使用的命令:
SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log
Run Code Online (Sandbox Code Playgroud)
这是一段 sql 文件创建脚本:
CREATE DATABASE aqualogy
COLLATE Modern_Spanish_CI_AS
WITH TRUSTWORTHY ON, DB_CHAINING ON;
GO
use aqualogy
GO
CREATE TABLE [dbo].[BaseLayers] (
[Code] nchar(100) NOT NULL ,
[Geometry] nvarchar(MAX) NOT NULL ,
[IsActive] bit NOT NULL DEFAULT ((1))
)
EXEC sp_updateextendedproperty @name = N'MS_Description', @value = N'Capas de cartografía base de la aplicaicón. Consideramos en Galia Móvil la cartografía(...)' …
Run Code Online (Sandbox Code Playgroud) 我在 SQL Server 2005/2008 中找不到直接设置UTF-8
相关的选项Collations/Charsets
,与可以在其他 SQL 引擎中设置的选项相同,但在 SQL Server 2005/2008 中只有拉丁语和 SQL 排序规则。
是否有一些选项可以在 Win2008 操作系统上的 SQL Server 引擎(两个版本)2005/2008 中强制/安装这些排序规则/字符集
sql-server-2005 sql-server-2008 sql-server collation encoding
我有一个带有 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
Run Code Online (Sandbox Code Playgroud)
但是varchar的定义说,它允许非 unicode 字符串数据。但 Trademark(™) 和 Registered(®) 符号是Unicode字符。定义是否与 varchar 数据类型的属性相矛盾?我阅读了几个链接,例如第一个和第二个。但是我仍然不明白为什么当定义说它只允许非 unicode 字符串值时它允许 unicode 字符串。
我需要一个字符编码技巧来去除希伯来语重音标记。
之前的样品
???????????? ??????? ????????? ??????????????? ???????????????
样品后
?????????????? ?? ????? ??????
我的计算机上安装了 SQL Server 2017。这是SELECT @@VERSION
返回的内容:
Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) 2018 年 7 月 21 日 07:47:45 版权所有 (C) 2017 Microsoft Corporation Enterprise Edition(64 位),Windows 10 Enterprise 10.0(Build 171) )`
直到昨天它都运行良好。突然SQL SERVER Service
没跑了。当我想手动运行该服务时,它显示3417 error
. 当我检查事件日志时,我看到了这个错误:
数据库 'master' 的脚本级升级失败,因为升级步骤 'msdb110_upgrade.sql' 遇到错误 200,状态 7,严重性 25。这是一个严重的错误情况,可能会干扰正常操作,数据库将脱机。如果在升级“master”数据库期间发生错误,它将阻止整个 SQL Server 实例启动。检查以前的错误日志条目是否有错误,采取适当的纠正措施并重新启动数据库,以便脚本升级步骤运行完成。`
经过一番谷歌搜索后,我发现我可以运行它/T902 switch
并尝试解决问题。但没有任何解决方案对我有用。所以我安装了相同SQL SERVER 2017
和恢复数据库的另一个实例。现在新安装的实例也有同样的问题。
可能是什么问题呢?
更新 这是 SQL Server 的完整错误日志。
2018-09-17 13:06:47.29 spid6s 配置选项“显示高级选项”从 1 更改为 1。运行 RECONFIGURE 语句进行安装。
2018-09-17 …
当我使用 连接到 Postgresql 数据库时psql
,我经常收到以下消息:
=> SELECT * FROM question_view ;
ERROR: character with byte sequence 0xd7 0x9e in encoding "UTF8" has no equivalent in encoding "LATIN1"
Run Code Online (Sandbox Code Playgroud)
按照这个SO answer,我知道我应该相应地更改客户端编码:
SET client_encoding = 'UTF8';
Run Code Online (Sandbox Code Playgroud)
client_encoding
每次连接到数据库时更改都很麻烦。有没有办法在.pgpass
文件中或其他任何地方永久配置此设置?
我们最近遇到了与在 SQL Server 中存储为 varchar(120) 的字段相关的编码问题。在 SSMS 中,varchar 显示为:
“谁杀了琼本?”
但是,当它被带入python时,它显示为:
我从 Python 方面对此进行了研究,并没有发生什么奇怪的事情。我的理论是 SQL Server 中的 varchar 接受 UTF-8 字符,这些字符在 python 中的显示方式与 SSMS 不同。我对 SQL Server 中的编码不是很熟悉。有人可以让我知道以下内容:
先感谢您!
使用sp_help N'table_name';
我发现这个VARCHAR
列的排序规则是:SQL_Latin1_General_CP1_CI_AS
。
List of databases
Name | Owner | Encoding | Collate | Ctype |
-------------------------+----------+----------+----------------------------+----------------------------|
MyDatabase | postgres | UTF8 | English_United States.1252 | English_United States.1252 |
Run Code Online (Sandbox Code Playgroud)
有人能解释一下编码、整理和 Ctype 是如何相互关联的吗?
我知道编码会影响信息的实际存储方式(即“A”需要一个字节还是多个字节,以及这些字节的值取决于编码)。
有人告诉我 collate 指定比较字符的规则。如果要对一堆字符串进行排序,则整理类型将决定顺序。
我一直在努力寻找 Ctype 是什么;可能与大写和小写等概念有关(假设 'a' 知道 'A' 是大写形式?)。
我不明白(如在我的示例中)我如何拥有一个 UTF8 编码的数据库并使用英语 1252 的校对值。UTF8 有很多 win1252 没有的字符;如果我尝试对它们进行排序或比较会发生什么?我当前的设置是荒谬的......似乎我总是希望编码/整理/Ctype 同意?
encoding ×10
sql-server ×7
collation ×3
postgresql ×3
unicode ×3
bytea ×1
datatypes ×1
localization ×1
psql ×1
python ×1
sqlcmd ×1
string ×1
t-sql ×1
utf-8 ×1