【问题标题】:How to remove extended ASCII chars from SQL Server如何从 SQL Server 中删除扩展的 ASCII 字符
【发布时间】:2021-07-23 03:42:49
【问题描述】:

因此尝试删除所有扩展的 ascii 字符并在 ddl 中使用排序规则 SQL_Latin1_General_CP1253_CI_AI 但仍然获得 ascii 字符。有什么建议吗?

我在 sql 中存储了一个值作为“àccõrd”,我希望它存储为一致。当我尝试选择 àccõrd collat​​e SQL_Latin1_General_CP1253_CI_AI 时,它可以工作,但是当我加载它时,它仍然被加载为 àccõrd

【问题讨论】:

  • 请提供minimal reproducible example 并完整说明您在做什么以及困难是什么
  • 如果您尝试删除非 ASCII 字符,为什么仍然有 ASCII 字符会出现问题?请使用一些示例数据、您尝试使用的代码、实际结果和预期结果来编辑您的问题。
  • 编辑了问题。谢谢。 @AlwaysLearning

标签: sql sql-server ascii collation non-ascii-characters


【解决方案1】:

这里有两种方法可以实现您的目标......

第一种方法:用特定的排序规则定义列,例如:

create table dbo.Foo (
  FooName varchar(50) collate SQL_Latin1_General_CP1253_CI_AI
);
insert dbo.Foo (FooName) values ('àccõrd');
select FooName from dbo.Foo;

产量:

FooName
-------
accord

第二种方法:将文本插入表格时对其进行整理:

-- Display the SQL Server instance's "default collation," configured during setup.
-- e.g.: SQL_Latin1_General_CP1_CI_AS
select serverproperty('collation') as ServerCollation;

-- Display the current database's "default collation," configured in CREATE DATABASE.
-- e.g.: SQL_Latin1_General_CP1_CI_AS
select collation_name
from sys.databases
where [name]=db_name();

create table dbo.Bar (
  BarName varchar(50) --database default: collate SQL_Latin1_General_CP1_CI_AS
);
insert dbo.Bar (BarName) values ('àccõrd' collate SQL_Latin1_General_CP1253_CI_AI);
select BarName from dbo.Bar;

产量:

BarName
-------
accord

注意:这些排序技巧仅适用于 charvarchar 数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2015-01-18
    相关资源
    最近更新 更多